在PHP中替换MySQL中的JSON数组
我试图在MySQL数据库的JSON数组中替换JSON数组中的数据 该数组如下所示:在PHP中替换MySQL中的JSON数组,php,mysql,arrays,json,Php,Mysql,Arrays,Json,我试图在MySQL数据库的JSON数组中替换JSON数组中的数据 该数组如下所示: {"slug": "SLUG","price": "{"44":12,"_default":12}", "test": "TEST"} 现在我想更新price数组中的两个字段 我使用以下代码可以将price数组替换为字符串或数字,但无法将其替换为其他数组: $sql = "UPDATE products SET productDynamicFields = JSON_REPLACE(productDynamic
{"slug": "SLUG","price": "{"44":12,"_default":12}", "test": "TEST"}
现在我想更新price数组中的两个字段
我使用以下代码可以将price数组替换为字符串或数字,但无法将其替换为其他数组:
$sql = "UPDATE products SET productDynamicFields = JSON_REPLACE(productDynamicFields,'$.price', '$test')
Where productSlug = '$productSlug'";
$result = mysqli_query($link,$sql);
如您所见,我正在使用一个名为$test
的变量
我尝试为变量指定以下值:$test=['44'=>13',\u default'=>13]然后像这样编码:$test=json\u encode($test)代码>
但现在在我的数据库中,它看起来是这样的:
{"slug": "SLUG","price": "{"44":12,"_default":12}", "test": "TEST"}
“价格”:“{\“44\”:13,\“\u default\”:13}
我现在尝试使用JSON\u UNESCAPED\u斜杠
,但没有成功
如何在数组中实现数组?与其从php生成json并尝试将其传递给MySQL,不如使用MySQL函数json\u object()
生成有效的json对象:
update t
set js = json_replace(js, '$.price', json_object('44', 13, '_default', 13))
:
create table t (js json);
insert into t values('{"slug": "SLUG","price": {"44":12,"_default":12}, "test": "TEST"}');
update t
set js = json_replace(js, '$.price', json_object('44', 13, '_default', 13));
select * from t
|js|
| :-------------------------------------------------------------------- |
|{“slug”:“slug”,“test”:“test”,“price”:{“44”:13,{u default:13}|
注:
该数组如下所示:
{"slug": "SLUG","price": "{"44":12,"_default":12}", "test": "TEST"}
{“slug”:“slug”,“price”:“{“44”:12”,“默认值:12}”,“test”:“test”}
- 这是一个json对象(在键
“price”
下有一个嵌入式json对象),而不是json数组
- 在嵌入对象的周围有额外的双引号,这使得json无效,我假设这是一个输入错误,并删除了它们
提供一个更好的例子..因为不清楚JSON结构是否可以有多个价格项目,或者不在同一个JSON结构中,或者必须处理更多的记录..JSON结构将始终是相同的。我只需要能够编辑'44'的值和'u default'的值。我还必须使用PHP,因为这是wo与我正在使用的另一个脚本一起工作。在这种情况下,请检查@GMB的答案是否适用于您的情况。不要忘记在GMBUPDATE
建议中添加一个WHERE
子句,因为我很确定您需要它。您的代码容易受到SQL注入的攻击。您应该使用准备好的语句。@Dharman是对的,但topicstarter重写时不要混淆/错误地将JSON路径$.price
作为PHP变量..是的!我让它工作了!我使用了:$sql=“UPDATE products SET productDynamicFields=JSON\u REPLACE(productDynamicFields,$.price',JSON\u OBJECT('44',$test,''u default',$test其中productSlug='";代码>我现在将查看脚本的安全性。:)