在PHP中替换MySQL中的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

我试图在MySQL数据库的JSON数组中替换JSON数组中的数据

该数组如下所示:

{"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的答案是否适用于您的情况。不要忘记在GMB
UPDATE
建议中添加一个
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='";我现在将查看脚本的安全性。:)