まず第一に: 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つの理由です。 エスケープには使用しないでください。