まず第一に: mysql_escape_string
を使用しないでください 、(理由により)廃止されました!
mysql
を介してデータベースに接続するレガシーアプリケーションをサポートする必要がある場合 拡張機能(は非推奨になりました
)、 mysql_real_escape_string
を使用します
代わりは。それ以外の場合は、すぐに切り替え
mysqli
へ 、ここで、準備されたステートメントとバインドされたパラメーターは、ユーザー入力をエスケープするためのより堅牢なメカニズムを提供します。
そうは言っても、答えは mysql_real_escape_string
および addslashes
:
違い#1
addslashes
MySql接続エンコーディングについては何も知りません。 MySql接続で使用されるエンコーディング以外のエンコーディングを表すバイトを含む文字列を渡すと、文字の値を持つすべてのバイトをうまくエスケープします。 'コード> 、
"コード> 、
\コード> および
\x00
。これは、すべての文字と同じではない場合があります 'コード> 、
"コード> 、
\コード> および
\x00
8ビットエンコーディングとUTF-8以外のエンコーディングを使用している場合。その結果、MySqlによって受信された文字列が破損します。
このバグをトリガーするには、 iconv
を使用してみてください。
変数をUTF-16に変換してから、 addslashes
でエスケープします 。データベースが受け取るものを確認してください。
これが、 addslashes
の理由の1つです。 エスケープには使用しないでください。
違い#2
addslashes
とは対照的 、 mysql_real_escape_string
\ r
の文字もエスケープします 、 \ n
、および \ x1a
。 MySqlと通信するときは、これらの文字もエスケープする必要があるようです。エスケープしないと、不正な形式のクエリが結果になる可能性があります
これが、 addslashes
のもう1つの理由です。 エスケープには使用しないでください。