2

JSON をデータベースに挿入する際に問題が発生しました。私の意図は、変数を取得し、それらを json_encode し、(magic_quotes から) スラッシュを削除してから、{"key":"value"} の引用符をエスケープするためにスラッシュを追加することです。

残念ながら、エンコードされた文字列の strip_slashes は何もせず、これを出力します

{"content":"<p>This string has it\'s downsides</p>","date":1271352514}

その後、addslashes と mysql_real_escape_string を試しましたが、どちらも出力されます

"{\\"content\\":\\"<p>This string has it\\\'s downsides</p>\\",\\"date\\":1271352514}"

なぜ2つのスラッシュを追加しているのかわかりませんか? そして、私はこれに髪を引き裂いています。スラッシュを取り除こうとするたびに、1つが残り、スラッシュを追加すると2つ追加されます。どんな助けでも大歓迎です!

4

2 に答える 2

0

まず、本当にオフにすることを検討する必要があります...マニュアルmagic_quotesを引用するには:

警告

この機能は、PHP5.3.0で非推奨になりました。この機能に依存することは強くお勧めしません。


そうは言っても、json_encode()(独自の配列を作成する代わりに)JSON配列を作成するために使用し、次のmysql_real_escape_string()ようにクエリを実行しながら、への1回の呼び出しで終了します。

$data = array();
$data['content'] = "<p>This string has it's downsides</p>";
$data['date'] = 1271352514;

$json = json_encode($data);

mysql_query("INSERT INTO data
                VALUES ('" . mysql_real_escape_string($json) . "');");

また、PHPグループでは、のmysqli代わりにを使用することをお勧めしますmysql。そのオブジェクト指向APIとパラメーター化されたクエリのサポートにより、開発速度、コードメンテナンス、およびセキュリティの両方が大幅に向上します。

以下を使用して記述された上記のコードは次のとおりですmysqli

$data = array();
$data['content'] = "<p>This string has it's downsides</p>";
$data['date'] = 1271352514;

$json = json_encode($data);

$sqlInsert = $mysqli->prepare("INSERT INTO data VALUES (?);")
$sqlInsert->bind_param("s", $json);
$sqlInsert->execute();
于 2010-04-15T17:43:09.360 に答える
0

このような JSON 文字列が既にある場合 (ちなみに、JSON では/もエスケープする必要があります):

{"content":"<p>This string has it\'s downsides<\/p>","date":1271352514}

次に、それを適用mysql_real_escape_stringしてエスケープし、MySQL 文字列宣言に挿入するために使用できるようにするだけです。

$query = "INSERT INTO … SET json='".mysql_real_escape_string($json).'"';

また、マジック クォートを有効にしている場合は、そのステップの前にそれらを無効にするか削除し$jsonて、文字列が実際に有効な JSON になるようにする必要があります。

于 2010-04-15T17:40:41.133 に答える