文字列をエスケープするということは、その文字列で使用される引用符(およびその他の文字)のあいまいさを減らすことを意味します。たとえば、文字列を定義するときは、通常、二重引用符または一重引用符で囲みます。
"Hello World."
しかし、文字列に二重引用符が含まれている場合はどうなりますか?
"Hello "World.""
今、私にはあいまいさがあります-通訳者は私の文字列がどこで終わるのかわかりません。二重引用符を保持したい場合は、いくつかのオプションがあります。文字列を一重引用符で囲むことができます:
'Hello "World."'
または、引用符をエスケープすることもできます:
"Hello \"World.\""
スラッシュが前に付いている引用符はすべてエスケープされます 、および文字列の値の一部であると理解されています。
クエリに関しては、MySQLには、混乱を引き起こすことなくクエリで使用できない特定のキーワードがあります。列の名前が「Select」である値のテーブルがあり、それを選択したいとします。
SELECT select FROM myTable
ここで、クエリにあいまいさを導入しました。クエリ内で、バックティックを使用することで、そのあいまいさを減らすことができます:
SELECT `select` FROM myTable
これにより、フィールド名の選択に不適切な判断を使用することで生じた混乱が解消されます。
これの多くは、値を mysql_real_escape_string()
。以下の例では、ユーザーが送信したデータをこの関数に渡して、クエリで問題が発生しないようにしていることがわかります。
// Query
$query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
mysql_real_escape_string($user),
mysql_real_escape_string($password));
add_slashes
など、文字列をエスケープするための他のメソッドがあります。 、addcslashes
、quotemeta
、およびその他、安全なクエリを実行することが目標である場合、大規模な開発者はmysql_real_escape_string
を好むことがわかります。 またはpg_escape_string
(PostgreSQLのコンテキストで。