• ベストアンサー

mysql_real_escape_stringについて

マニュアルを見ると以下の説明がありました。 >mysql_real_escape_string() は、MySQL のライブラリ関数 mysql_real_escape_string をコールしています。 >これは以下の文字について先頭にバックスラッシュを付加します。 \x00, \n, \r, \, ', " そして \x1a. phpでpdoを使用しmysqlに登録しているのですがこの結果は正しくエスケープできているでしょうか? // 登録情報配列 $user = array( 'id' => 'test', 'pass' => '\x00 \n \r \ \x1a' ); // 略(登録実行) この結果以下のテキストがmysqlに登録されてます。 「\x00 \n \r \ \x1a」 エスケープ前の値と登録された値がなんら変わらなく見えるのですが気のせいでしょうか? ちなみにシングルクオテ―ションをダブルにすると以下のように登録されました。 「 \ ・」

質問者が選んだベストアンサー

  • ベストアンサー
  • BellBell
  • ベストアンサー率54% (327/598)
回答No.2

>エスケープ前の値と登録された値がなんら変わらなく見えるのですが気のせいでしょうか 正常にエスケープされた結果、正常に登録されたので変化していません。 もしエスケープされていない場合、文字化けするなどの正常ではない登録がされる場合があります。 ※そもそもクエリーが失敗する場合もあります。 正常に登録するためにエスケープしているため、正常に登録され、結果変化なしというふうに考えると判りやすいかと思います。

dcx147
質問者

お礼

お返事ありがとございます。 「<」や「>」が「&gt;」や「&lt;」に変わるものと同様に考えていたのでこのような質問を させていただきましたがおかげさまで問題解決です!

すると、全ての回答が全文表示されます。

その他の回答 (1)

noname#111181
noname#111181
回答No.1

まず、PHPではシングルクォーテーションとダブルクォーテーションの作用が違います。 '\x00 \n \r \ \x1a'は、そのまま「\x00 \n \r \ \x1a」という文字列として認識されます。 "\x00 \n \r \ \x1a"は、16進数で「00 0D 0A 5C 1A」と認識されます。 ですので、ご質問にある動作は間違っていません。

dcx147
質問者

お礼

早速のお返事ありがとうございます。 正常にエスケープできているのですね。不安でしたがおかげさまで解決です!

すると、全ての回答が全文表示されます。

関連するQ&A