2017-07-06 49 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(要素、' $。\"バージョン\ "値\" '、' 1.9.8.20 ')名前は'クライアント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); 
}