MySQL でのバックスラッシュのエスケープ: WHERE 句と LIKE 句での使用法
バックスラッシュを含むタイトルを検索する次のクエリを考えてみましょう。
>(SELECT * FROM `titles` WHERE title = 'test\') UNION ALL (SELECT * FROM `titles` WHERE title LIKE 'test\\')
出力はバックスラッシュがエスケープされていないことを示していますWHERE句内で。ただし、LIKE 句には追加のバックスラッシュが必要です。
なぜ違いますか?
MySQL では、デフォルトでバックスラッシュ () が LIKE のエスケープ文字として機能します。 LIKE の MySQL マニュアルによると:
「MySQL は文字列で C エスケープ構文を使用するため...LIKE 文字列で使用する '' はすべて 2 倍にする必要があります。たとえば、「n」を検索するには、次のように指定します。 '' を検索するには、'\' として指定します。これは、バックスラッシュがパーサーによって一度削除され、パターンの一致時に再度削除され、単一のバックスラッシュが残されるためです。 "
バックスラッシュのエスケープ
ただし、MySQL には、ESCAPE キーワードを使用してエスケープ文字を変更する機能が用意されています。たとえば、次のクエリではエスケープ文字としてパイプ文字 (|) を使用します:
SELECT * FROM `titles` WHERE title LIKE 'test\' ESCAPE '|'
このクエリでは、パイプ文字が使用されるため、LIKE 句にバックスラッシュが 1 つだけ必要です。逃げるため。
以上がMySQL の WHERE 句と LIKE 句で異なるバックスラッシュ エスケープが必要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。