2013-03-10 89 views
2

我有一個數組,我編碼爲json,並將其保存到數據庫。該陣列看起來像php多維數組編碼和解碼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 = 「'」 $鍵。」「;

比當我從數據庫中檢索json字符串並嘗試重建數組json_decode($json, true);輸出null

+0

您的php副本如果沒有正確的方法,粘貼看起來會被語法破壞。 – Kzqai 2013-03-10 13:19:00

+0

'test2 <需要' – Barif 2013-03-10 13:20:40

+0

'var_dump($ json);'確保它確實是你想要解碼的字符串 – 2013-03-10 13:20:43

回答

0

您可以序列化數據而不是將其存儲爲json。

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

然後當你想重新創建數組時,只需將它從表中取出並反序列化()即可。在數據庫中這不是人類可讀的;然而,這種技術是快速的,適用於在數據庫中存儲數組。如果數據是您的js腳本所需要的,那麼在您反序列化()它之後使用json_encode()。

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 
     ) 

)