2

我有一个数组,我编码为 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重建数组时

4

2 回答 2

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
        )

)
于 2013-03-12T03:17:09.463 回答
0

您可以序列化数据而不是将其存储为 json。

$sql = "UPDATE table SET field='".serialize($myarray)."' WHERE ...";

然后,当您想重新创建数组时,只需将其从表中拉出并 unserialize() 即可。它在数据库中不是人类可读的;然而,这种技术速度很快,并且适用于在数据库中存储数组。如果你的 js 脚本需要数据,那么在你 unserialize() 之后 json_encode() 它。

于 2013-03-11T20:47:45.430 回答