MySQL のエスケープ可能文字のエスケープ
MySQL には、複数の入力に一致するワイルドカードとみなされる文字のセットが含まれています。これらの文字には、% (パーセント) と _ (アンダースコア) が含まれます。 mysql_real_escape_string() は、SQL クエリに含めるためにほとんどの文字のエスケープを処理するように設計されていますが、これらのワイルドカードには対応していません。
ユーザー入力を完全にエスケープし、これらの文字がメタ文字として解釈されないようにするには、次のことをお勧めします。 mysql_real_escape_string() 関数を addcslashes() 関数と組み合わせて使用します。
ただし、 LIKE ステートメントに含めるために文字をエスケープする場合は、別のアプローチを採用する必要があります。 LIKE ステートメントでは、_ と % はワイルドカードではなくリテラル文字とみなされます。これらの文字を文字通りに一致させるには、ESCAPE 句を使用してエスケープする必要があります。
たとえば、リテラルのパーセント記号に一致させるには、LIKE ステートメントで次の構文を使用する必要があります。
LIKE 'something\%' ESCAPE '\'
注バックスラッシュ () を LIKE エスケープ文字と SQL 文字列リテラルのエスケープ文字の両方として使用する。これにより、パーセント記号 (%) を LIKE ステートメント内で文字通り解釈できるようになります。
PHP の準備されたステートメントを使用する場合、エスケープは自動的に処理され、手動でエスケープする必要がなくなります。ただし、準備されたステートメントが使用できない場合は、mysql_real_escape_string() と addcslashes() を組み合わせることで、潜在的な SQL インジェクション攻撃からユーザー入力を効果的に保護できます。
以上がクエリおよび LIKE ステートメントで MySQL ワイルドカード文字を適切にエスケープする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。