59

ですから、これは私たち全員が知っておくべきことであり、最初に見たときに頭に浮かびました..

5.3 から非推奨になっていることは知っていmysql_escape_stringますが、実際の違いは何でしたかmysql_real_escape_string

私が考えたのは、mysql リソースの 2 番目の引数を取ることとmysql_real_escape_stringまったく同じであるということです。mysql_escape_stringmysql_real_escape_string

それで、2つの関数が必要ないため、文字列の処理方法に何らかの違いがあるに違いないと思いました。

そのため、違いは純粋にロケールと文字エンコーディングにあると考えました。?

誰かが私のためにこれを片付けることができますか?

4

4 に答える 4

92

違いはmysql_escape_string、文字列を生のバイトとして扱い、適切であると思われる場所にエスケープを追加することです。

mysql_real_escape_string一方、MySQL 接続に使用される文字セットに関する情報を使用します。これは、マルチバイト文字を適切に処理しながら、文字列がエスケープされることを意味します。つまり、文字の途中にエスケープ文字を挿入しません。mysql_real_escape_stringこれが;への接続が必要な理由です。文字列をどのように扱うべきかを知るために必要です。

ただし、エスケープする代わりに、MySQLi ライブラリからパラメーター化されたクエリを使用することをお勧めします。以前はエスケープ ルーチンにバグがありましたが、一部が再び出現する可能性があります。クエリをパラメータ化するのは非常に難しいため、MySQL のバグによって危険にさらされる可能性は低くなります。

于 2010-09-08T07:51:05.600 に答える
3

ええと...そうですね。MySQL 接続の文字セットが考慮されます。

http://php.net/mysql_escape_string

この関数は、接続ハンドラを取り、現在の文字セットに従って文字列をエスケープすることをmysql_real_escape_string()除いて、と同じです。接続引数を取らず、現在の文字セット設定を尊重しません。mysql_real_escape_string()mysql_escape_string()

于 2010-09-08T07:49:27.647 に答える
3

mysql_escape_string5.3 から非推奨ではありませんが、4.3.0 以降では非推奨です。そのため、4.3.0 以上の PHP バージョンを使用している場合は、 を使用する必要がありますmysql_real_escape_string

を使用している場合は、php.ini からphp < 4.3.0作成するよりも、更新することをお勧めしますが、コードに問題がある場合は、.magic_quotes_gpc activemagic_quotes_gpcaddslashmysql_escape_string

于 2011-08-29T10:48:53.397 に答える
1

現在、これらの関数は両方とも非推奨です

PHP 4 >= 4.3.0 および PHP 5.PDO_MySQL拡張機能の使用を推奨

于 2013-06-26T02:25:17.070 に答える