php json insert,php – MySQL JSON编码字符串在INSERT..SELECT后损坏

我将图像URL的数组编码为json字符串并将它们存储在数据库中. (utf8_general_ci).

当我将数据插入表并检索它时,json_decode()能够解码它.

但是,当我从一个表复制数据到另一个表(INSERT INTO … SELECT语句)时,从数据库中检索后的数据不再被解码.

相反,我得到了损坏的json ENCoded字符串.即使是空数组[]也无法正确解码.

(必须制作图像,因为这些正方形不能作为文本复制).

编辑,检查了一下后,我试图从数据库bin2hex()两个字符串.

两者似乎完全相同.

但是,一个解码,一个解码.该

5b22687474703a5c2f5c2f7777772e

changes into

0022687474703a5c2f5c2f7777772e

因此,json_decode仅在字符串中将5b更改为00.

这就像它在某处丢失编码?

编辑2

static public function jsonDecodeFieldsArray($entries, $fields = array('features','images')){

foreach($entries as $key => $entry){

$entries[$key] = self::jsonDecodeFields($entry, $fields);

}

return $entries;

}

static public function jsonDecodeFields($entry, $fields = array('features','images')){

foreach($fields as $field){

if(isset($entry[$field])){

$entry[$field] = json_decode((string) $entry[$field], true);

}

}

return $entry;

}

我正在使用上面的代码来解码$fields指定的数组的键.但是,它不仅错误地解码.但也会影响$fields中未列出的键.腐蚀他们的编码.

更多要补充.如果我不使用这些函数并且在字段json_decode($array [0] [images],true)上仅使用json_decode,它可以正常工作.

解决方法:

为了澄清我找到了答案/解决方案,我写了这个答案

原因是这个错误不是SQL错误,数据是正确的.我有一个示例数组:

$many_entries = array(

array(

'features' = > 'json_encoded_string'

'images' = > 'json_encoded_string'

),

array(

'features' = > 'json_encoded_string'

'images' = > 'json_encoded_string'

)

);

// And

$one_entry = array(

'features' = > 'json_encoded_string'

'images' = > 'json_encoded_string'

);

现在我有2个功能.一个解析$many_entries(jsonDecodeFieldsArray)数组,一个解析$one_entry数组结构(jsonDecodeFields).

问题是我在$one_entry上使用了jsonDecodeFieldsArray,它使jsonDecodeFields迭代字符串.

标签:json,php,mysql,select-insert

来源: https://codeday.me/bug/20190708/1404227.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL从5.7版本开始支持JSON数据类型,可以存储JSON格式的数据,也可以解析JSON字符串中的数据。解析JSON字符串可以使用MySQLJSON函数。 例如,假设有一个JSON字符串: ```json {"name": "Tom", "age": 18, "hobbies": ["reading", "swimming"]} ``` 如果需要提取其中的数据,可以使用以下JSON函数: 1. JSON_EXTRACT():提取JSON字符串中指定路径的数据 ```MySQL SELECT JSON_EXTRACT('{"name": "Tom", "age": 18, "hobbies": ["reading", "swimming"]}', '$.name'); -- 输出结果为 "Tom" SELECT JSON_EXTRACT('{"name": "Tom", "age": 18, "hobbies": ["reading", "swimming"]}', '$.hobbies[0]'); -- 输出结果为 "reading" ``` 2. JSON_KEYS():返回JSON字符串中所有的键名 ```MySQL SELECT JSON_KEYS('{"name": "Tom", "age": 18, "hobbies": ["reading", "swimming"]}'); -- 输出结果为 ["name", "age", "hobbies"] ``` 3. JSON_LENGTH():返回JSON字符串中某个键名对应的值的长度或元素的个数 ```MySQL SELECT JSON_LENGTH('{"name": "Tom", "age": 18, "hobbies": ["reading", "swimming"]}', '$.hobbies'); -- 输出结果为 2 ``` 4. JSON_TYPE():返回JSON字符串中某个键名对应的值的类型 ```MySQL SELECT JSON_TYPE('{"name": "Tom", "age": 18, "hobbies": ["reading", "swimming"]}', '$.name'); -- 输出结果为 "STRING" ``` 如果要在MySQL中存储JSON数据类型,则可以使用以下语法: ```MySQL CREATE TABLE mytable ( id INT PRIMARY KEY, info JSON ); ``` 可以使用INSERT语句插入JSON数据: ```MySQL INSERT INTO mytable VALUES (1, '{"name": "Tom", "age": 18, "hobbies": ["reading", "swimming"]}'); ``` 使用SELECT语句查询JSON数据: ```MySQL SELECT info->'$.name' AS name, info->'$.age' AS age, info->'$.hobbies[0]' AS hobby FROM mytable WHERE id = 1; ``` 输出结果为: ``` +------+-----+---------+ | name | age | hobby | +------+-----+---------+ | Tom | 18 | reading | +------+-----+---------+ ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值