2017-07-06 21 views
-2

我堅持以下幾點:我有一個mysql數據庫(5.7)。我想更新一個json-data-entry。PHP的mysql json_set

這是我的數據庫中的數據看起來的樣子:

{ 
    "version": { 
     "0": { 
      "value": "1.9.6.81" 
     } 
    } 
} 

當我嘗試直接在命令行中更新與SQL這一領域沒有問題:

update item set elements = JSON_SET(elements, '$."version"."0"."value"', "1.9.8.40") where name like 'Client XZY'; 

但是當我嘗試用PHP,我有一些混合引號和雙引號的問題。

$connection = new mysqli('localhost', 'user', 'password');  
$updateSql = "update item set elements = JSON_SET(elements, '$."version'.'0'.'value"', '1.9.8.20') where name like 'Client XYZ';'; 

if($connection->query($updateSql) === TRUE){ 
     echo 'good :) '; 
} 
else{ 
     echo 'bad :('; 
} 
+0

簡單的任何報價,您也爲文本分隔符使用前放一個反斜槓。也就是說,如果你的PHP字符串文字以''開始'',你需要將''''中的每一個'''寫成'\「' – deceze

+0

提供你的輸入元素,就像版本是可變的一樣? –

+0

嘗試用這個更新字符串,沒有成功 '$ updateSql =「更新項目集元素= JSON_SET(元素,'$。\」version'。\「0 \」。\「value \」',1.9.8.20')其中名稱如'Client XYZ';「 ;' –

回答

0

得到它的工作

$connection = new mysqli('localhost', 'root', 'xxxxx'); 
mysqli_select_db($connection,"MYSQL5"); 

$updateSql = "UPDATE item SET elements = JSON_SET(elements, '$.\"version\".\"0\".\"value\"', '1.9.8.40') WHERE name LIKE 'lient XYZ';"; 

if($connection->query($updateSql) === TRUE){ 
     echo 'good :)'; 
} 
else{ 
     printf("Errormessage: %s\n", $connection->error); 
}