mysql_escape_string vs mysql_real_escape_string
-
01-10-2019 - |
質問
だから、これは私たち全員が知っておくべきことであり、私が最初に見たときに私の心で遊んだことです。
そんなこと知ってる mysql_escape_string
5.3から非推奨ですが、実際の違いは何でしたか mysql_real_escape_string
.
私が思ったのはそれでした mysql_real_escape_string
とまったく同じです mysql_escape_string
の他に mysql_real_escape_string
MySQLリソースについて2番目の引数を取ります。
それで、私は2つの機能が必要ではないので、文字列がどのように処理されるかについて、ある程度の違いがあるに違いないと思いました。
それで、私は違いが純粋にロケールとキャラクターのエンコーディングにかかっていると思いました。 ?
誰かが私のためにこれをクリアすることができますか?
解決
違いはそれです mysql_escape_string
文字列を生のバイトとして扱い、それが適切であると信じているところに逃げることを追加します。
mysql_real_escape_string
, 一方、MySQL接続に使用される文字セットに関する情報を使用します。これは、マルチバイト文字を適切に処理しながら、文字列が逃げられることを意味します。すなわち、キャラクターの真ん中に逃げ出すキャラクターを挿入しません。これが接続が必要な理由です mysql_real_escape_string
;文字列をどのように扱うべきかを知るために必要です。
ただし、逃げる代わりに、MySQLIライブラリからパラメーター化されたクエリを使用する方が良いアイデアです。以前は逃げるルーチンにはバグがあり、一部の人が再び現れる可能性があります。クエリのパラメーター化ははるかに困難であるため、MySQLバグによって損なわれる可能性は低くなります。
他のヒント
まあ...ある種の、はい。 MySQL接続の文字セットを考慮します。
http://php.net/mysql_escape_string
この関数は同一です
mysql_real_escape_string()
それ以外でmysql_real_escape_string()
接続ハンドラーを取り、現在の文字セットに従って文字列を脱出します。mysql_escape_string()
接続引数を取得せず、現在のcharSet設定を尊重しません。
mysql_escape_string
5.3から廃止されませんが、4.3.0以降は廃止されます。したがって、上記/または4.3.0を使用している人なら誰でも使用する必要があります mysql_real_escape_string
.
使用する場合 php < 4.3.0
, 、あなたを作るより magic_quotes_gpc active
php.iniから、更新することをお勧めしますが、あなたのコードがあなたが使用することを確認するよりも問題がある場合は、 magic_quotes_gpc
と addslash
ではなく機能 mysql_escape_string
.
これで、これらの関数は両方とも廃止されます
PHP 4> = 4.3.0およびPHP 5.
PDO_MySQL
拡大