php - mysql更新json字段被引用
问题描述
我将以下 json 结构存储到 mysql 中
{
"somefield": "0",
"date": "2020-12-01",
"caption": null,
"field": [
{
"id_type1": "5192"
},
{
"id_type2": "3285"
},
{
"id_type2": "3638"
},
{
"id_type2": "3750"
},
{
"id_type2": "3760"
},
{
"id_type1": "3161"
},
{
"id_type1": "1044"
}
],
"question": "",
"people": [],
"title": ""
}
当我提交一个表单时,我想按名称检索非空值,然后更新 json 字段
假设我提交了 2 个字段date
和field
字段
[{"id_type1":5192},{"id_type2":3285},{"id_type2":3638},{"id_type2":3750},{"id_type2":3760},{"id_type1":3161},{"id_type1":1044},{"id_type1":8081}]
日期
'2021-04-02'
我想用这些值更新 json 字段
UPDATE table
SET
json_champ = JSON_SET(json_champ, '$."field"', '[{"id_type1":5192},{"id_type2":3285},{"id_type2":3638},{"id_type2":3750},{"id_type2":3760},{"id_type1":3161},{"id_type1":1044},{"id_type1":8081}]', '$."date"', '2020-12-01')
WHERE id = '52907';
日期一切正常,但字段被转义
"field": "[{\"id_type1\":5192},{\"id_type2\":3285},{\"id_type2\":3638},{\"id_type2\":3750},{\"id_type2\":3760},{\"id_type1\":3161},{\"id_type1\":1044},{\"id_type1\":8081}]"
预期的
"field": [{"id_type1":5192},{"id_type2":3285},{"id_type2":3638},{"id_type2":3750},{"id_type2":3760},{"id_type1":3161},{"id_type1":1044},{"id_type1":8081}]
如果我将预期的输出直接粘贴到 PMA 中,它会按预期工作
粘贴
{
"somefield": "0",
"date": "2020-12-01",
"caption": null,
"field": [{"id_type1":5192},{"id_type2":3285},{"id_type2":3638},{"id_type2":3750},{"id_type2":3760},{"id_type1":3161},{"id_type1":1044},{"id_type1":8081}],
"question": "",
"people": [],
"title": ""
}
生成的sql查询
<?php
$sqlUpdate = " UPDATE table
SET
json_champ = JSON_SET(json_champ, '$."field"', '".json_encode($fieldValues, , JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT)."', '$."date"', '2020-12-01')
WHERE id = '".$id."'";
解决方案
据我所知,唯一的区别是在json的开头添加字段,然后将字符串插入表中?
$json_string = '[{"id_type1":5192},{"id_type2":3285},{"id_type2":3638},{"id_type2":3750},{"id_type2":3760},{"id_type1":3161},{"id_type1":1044}]';
$ammended_string = json_encode(['field' => json_decode($json_string)]);
$sqlUpdate = " UPDATE table
SET
json_champ = '".$ammended_string ."'
WHERE id = '".$id."'";
如果我错了,请纠正我,但认为你可能有点过于复杂了。
推荐阅读
- java - 无法在 Netbeans 8.2 JDK8u231 中创建 Maven 项目(Web 应用程序)
- bash - 在不退出脚本的情况下中断循环(bash)
- mysql - 如何优化 prestashop 类别随机获取产品
- laravel - 我在 laravel 中读取 excel 文件时遇到问题
- retrofit2 - 如果 api 检索数据失败,加载指示器不会隐藏,尽管如果 api 成功检索 Android Paging 库中的数据,它会隐藏
- linq - 如何将 Dapper LINQ 与 TableDirect(无嵌入式 SQL)与 ORACLE 一起使用?
- django - 如何限制未经授权的用户访问 django 中的不同页面
- java - 执行流水线操作的设计模式建议
- java - Android:每小时获取 UsageStats
- html - 降低背景图像的不透明度