2017-07-06 111 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); 
}