web-dev-qa-db-ja.com

mysql_escape_string VS mysql_real_escape_string

だから、これは私たち全員が知っておくべきことであり、私が最初に見たときに心で遊んだものです。

mysql_escape_stringは5.3から非推奨になりましたが、mysql_real_escape_stringの実際の違いは何ですか。

私が思ったのは、mysql_real_escape_stringmysql_escape_stringとまったく同じであり、mysql_real_escape_stringはmysqlリソースの2番目の引数を取ることです。

そのため、2つの関数は必要ないので、文字列の処理方法に多少の違いがあるはずだと思いました。

それで、違いはロケールと文字エンコーディングだけにかかっていると思いました。 ?

誰も私のためにこれをクリアできますか?

53
RobertPitt

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

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

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

87
Michael Madsen

_mysql_escape_string_は5.3から非推奨ではありませんが、4.3.0以降では非推奨です。したがって、PHP上記のバージョンまたは4.3.0を使用する場合は、_mysql_real_escape_string_を使用する必要があります。

_php < 4.3.0_を使用する場合、php.iniから_magic_quotes_gpc active_を作成するよりも、更新することをお勧めしますが、使用することを確認するよりコードに問題がある場合は、_magic_quotes_gpc_およびaddslash _mysql_escape_string_ではなく関数。

3
Rocky Sharma

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

http://php.net/mysql_escape_string

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

3
deceze

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

PHP 4> = 4.3.0およびPHP 5.彼らはPDO_MySQL拡張子

1
Jeff_Alieffson