sql >> データベース >  >> RDS >> Mysql

PHPのaddslashesとmysql(i)_escape_stringの違いは何ですか?

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



    1. 別のPostgreSQLCommitfestの管理

    2. Ms-AccessTreeViewを使用したListViewコントロール

    3. SQLServerデータベースで外部キー制約を再作成するスクリプトを生成する方法-SQLServer/TSQLチュートリアルパート73

    4. MySQLは列のデータ型をVARCHARからINTに変換します