gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 07:39:39 25 4
gpt4 key购买 nike

我正在将图像 URLS 数组编码为 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

(必须制作图像,因为这些方 block 无法复制为文本)。

编辑,经过更多检查后,我尝试对数据库中的两个字符串进行 bin2hex()。

两者看起来完全一样。

然而,一个解码,一个不解码。

5b22687474703a5c2f5c2f7777772e
changes into
0022687474703a5c2f5c2f7777772e

因此,json_decode 只是将 string 中的 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 json_decode($array[0][images], true) 它工作正常。

最佳答案

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

这个错误背后的原因不是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 对字符串进行迭代。

关于php - INSERT..SELECT 后 MySQL JSON 编码字符串损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24848157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com