我有一个数组,我编码为json,我将它保存到数据库。该数组看起来像
$myarray = array(
'test'=>array('key1'=>'1',
'key2'=>'2',
'key3'=>'3'),
'test2' =>array('key4'=>'1',
'key5'=>'<a href="myclass"></a>'
)
);
json_encode($myarray);
我数据库中保存的json看起来像
{
"test": {"key1":"1",
"key2":"2",
"key3":"3"
},
"test2": {"key4":"1",
"key5":"<a href ="myclass"></a>"
}
}
MYSQL保存
$sql = "UPDATE my_table SET params= '".json_encode($param )."' WHERE id
='“。$ key。”'“;
当我从数据库中检索json字符串并尝试使用json_decode($json, true);
重建数组时输出null
答案 0 :(得分:0)
您可以序列化数据,而不是将其存储为json。
$sql = "UPDATE table SET field='".serialize($myarray)."' WHERE ...";
然后,当您想要重新创建数组时,只需将其从表中拉出并反序列化()即可。它在数据库中不是人类可读的;但是这种技术很快,适用于在db中存储数组。如果你的js脚本需要数据,那么在你反序列化它之后json_encode()就可以了。
答案 1 :(得分:0)
您是否尝试过使用addslashes()
和stripslashes()
php函数?
尝试: 要更新你的表格:
$sql = "UPDATE my_table SET params='".addslashes(json_encode($myarray))."' WHERE id ='".$key."';";
从表中读取:
$sql = "SELECT params FROM my_table WHERE id='".$key."';";
...code to read row...
$myparams = stripslashes($row['params']);
你也可以从php手册stripslashes_deep()
尝试多维数组的自定义函数,参见http://www.php.net/manual/en/function.stripslashes.php(例2)
function stripslashes_deep($value)
{
$value = is_array($value) ?
array_map('stripslashes_deep', $value) :
stripslashes($value);
return $value;
}
// Example
$array = array("f\\'oo", "b\\'ar", array("fo\\'o", "b\\'ar"));
$array = stripslashes_deep($array);
print_r($array);
// Output
Array
(
[0] => f'oo
[1] => b'ar
[2] => Array
(
[0] => fo'o
[1] => b'ar
)
)