5

QUOTE()MySQL では、との違いは何mysql_real_escape_string()ですか? MySQLのドキュメントから、私は次のことを知っています:

見積もり()

  • SQLクエリに書き込まれる
  • バックスラッシュ、一重引用符、NUL、CTRL+Z をエスケープします
  • 単一引用符で囲まれた文字列を返します
  • 動作は MySQL サーバーの文字セットに依存します

mysql_real_escape_string()

  • クエリが実行される前に C/C++ で記述され、エスケープされた文字列を送信前に読み取り/変更できるようにする
  • と比較すると非常に使いにくいQUOTE()
  • バックスラッシュ、一重引用符、NUL、CTRL+Z、および二重引用符、\n、および \r をエスケープします
  • ログファイルで文字を読みやすくするために、引用符を追加しているようです
  • 動作は MySQL サーバーの文字セットに依存します

\nログを無視して、\r文字をエスケープすると便利ですか? この 2 つの機能では、クライアント/サーバー機能の効率に違いはありますか? mysql_real_escape_string()開発者が、エスケープされた文字列をクエリに入力する前に処理することが望ましい場合に便利です。しかし、QUOTE()文字列をエスケープする最も安全で信頼できる方法を提供していませんか?

QUOTE()すべての言語のすべてのクエリに使用し、言語固有の関数で文字列をエスケープすることを忘れるべきかどうか疑問に思います。


4

2 に答える 2

3

これは、QUOTE()他のSQLステートメントを構成するSQLステートメント内で使用することを意図しているようです。SQLの外部にいる場合は、を使用する必要がありますmysql_real_escape_string()

[...] Cプログラムでは、mysql_real_escape_string()CAPI関数を使用して文字をエスケープできます。[...]他のSQLステートメントを構成するSQLステートメント内で、QUOTE()関数を使用できます。

文字列リテラル(MySQLマニュアル)の下部で説明されているように。

于 2012-12-03T21:38:02.647 に答える
0

QUOTE()はすでにクエリに含まれているため、そこに何も入力しなかった場合と同じくらい簡単に抜け出すことができます。mysql_real_escape_string任意の文字列を安全にクエリに挿入できるようにするために不可欠です。

関数名が扱いにくいという問題は、何らかのエイリアスを使用することで簡単に解決できます。私は C/C++ ユーザーではありませんが、本質的に必要なものを書くために使用できるマクロがあり、長い関数名に置き換えられませんか?

于 2012-07-25T03:24:27.447 に答える