ホームページ >バックエンド開発 >PHPチュートリアル >MySQL の WHERE 句と LIKE 句でスラッシュを別の方法でエスケープする必要があるのはなぜですか?
MySQL では、クエリ内でスラッシュ () を処理することができます。混乱する。次のクエリを考えてみましょう:
<code class="sql">(SELECT * FROM `titles` where title = 'test\') UNION ALL (SELECT * FROM `titles` where title LIKE 'test\\')
LIKE 句を使用する 2 番目のクエリでは、「test」内の元のスラッシュをエスケープするために追加のバックスラッシュが必要になることが予想されるかもしれません。ただし、結果は、両方のクエリがタイトルとして「test」を持つ同じ行を正常に返したことを示しています。
この不一致は、WHERE 句と LIKE 句でエスケープ文字を使用する MySQL の動作が原因で発生します。 WHERE 句では、バックスラッシュはエスケープ文字として機能し、特殊文字が文字通り解釈されないように保護します。対照的に、LIKE 句ではバックスラッシュがデフォルトのエスケープ文字であり、検索パターン内の他の文字をエスケープできます。
LIKE の MySQL マニュアルに記載されているとおり:
したがって、「test」のバックスラッシュは WHERE 句の解析中に自動的にエスケープされますが、 LIKE 句が意図したエスケープ シーケンスと一致するには、明示的に (「test\」に) 二重化する必要があります。
あるいは、次の変更されたクエリに示すように、LIKE に別のエスケープ文字を指定することもできます。
<code class="sql">SELECT * FROM `titles` WHERE title LIKE 'test\' ESCAPE '|'</code>エスケープ文字としてバックスラッシュをパイプ文字に置き換えることにより、バックスラッシュを二重にしなくてもリテラルの「テスト」を正確に検索できます。
以上がMySQL の WHERE 句と LIKE 句でスラッシュを別の方法でエスケープする必要があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。