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 save $sql = "UPDATE my_table SET params= '".json_encode($param )."' WHERE id ='"。$key。"'";

データベースからjson文字列を取得し、json_decode($json, true);出力がnullの配列を再構築しようとしたときよりも

4

2 に答える 2

0

データをjsonとして保存するのではなく、シリアル化することができます。

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

次に、配列を再作成する場合は、テーブルから配列を取り出してunserialize()します。データベースでは人間が読める形式ではありません。ただし、この手法は高速で、配列をデータベースに格納するのに適しています。jsスクリプトでデータが必要な場合は、unserialize()した後にjson_encode()します。

于 2013-03-11T20:47:45.430 に答える
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']);

また、 http://www.php.net/manual/en/function.stripslashes.php (例 #2)stripslashes_deep()を参照してくださいという php マニュアルの多次元配列のカスタム関数を試すこともできます。

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 に答える