電子書籍の厳選無料作品が豊富!

マニュアルを見ると以下の説明がありました。
>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」

エスケープ前の値と登録された値がなんら変わらなく見えるのですが気のせいでしょうか?
ちなみにシングルクオテ―ションをダブルにすると以下のように登録されました。



\ ・」

A 回答 (2件)

>エスケープ前の値と登録された値がなんら変わらなく見えるのですが気のせいでしょうか


正常にエスケープされた結果、正常に登録されたので変化していません。
もしエスケープされていない場合、文字化けするなどの正常ではない登録がされる場合があります。
※そもそもクエリーが失敗する場合もあります。

正常に登録するためにエスケープしているため、正常に登録され、結果変化なしというふうに考えると判りやすいかと思います。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/03/21 21:54

まず、PHPではシングルクォーテーションとダブルクォーテーションの作用が違います。


'\x00 \n \r \ \x1a'は、そのまま「\x00 \n \r \ \x1a」という文字列として認識されます。
"\x00 \n \r \ \x1a"は、16進数で「00 0D 0A 5C 1A」と認識されます。

ですので、ご質問にある動作は間違っていません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/03/21 18:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!