Grz*_*orz 5 php mysql json select-insert
我将图像 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
Run Code Online (Sandbox Code Playgroud)
因此,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;
}
Run Code Online (Sandbox Code Playgroud)
我正在使用上面的代码来解码 $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'
);
Run Code Online (Sandbox Code Playgroud)
现在我有两个功能。一种用于解析$many_entries( jsonDecodeFieldsArray) 数组,一种用于解析$one_entry数组结构 ( jsonDecodeFields)。
问题是我用它jsonDecodeFieldsArray来迭代字符串。$one_entryjsonDecodeFields
| 归档时间: |
|
| 查看次数: |
753 次 |
| 最近记录: |