加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 22:53:14 所属栏目:PHP教程 来源:网络整理
导读:我将图像URL的数组编码为json字符串并将它们存储在数据库中. (utf8_general_ci). 当我将数据插入表并检索它时,json_decode()能够解码它. 但是,当我从一个表复制数据到另一个表(INSERT INTO … SELECT语句)时,从数据库中检索后的数据不再被解码. 相反,我得到
我将图像URL的数组编码为json字符串并将它们存储在数据库中. (utf8_general_ci).

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

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

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

它从http://pl.tinypic.com/r/fwoiol/8转换
进入http://pl.tinypic.com/r/bgea05/8

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

编辑,检查了一下后,我试图从数据库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,'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迭代字符串.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读