ホームページ >データベース >mysql チュートリアル >PDO でワイルドカードを使用して LIKE パラメータを安全にバインドするにはどうすればよいですか?

PDO でワイルドカードを使用して LIKE パラメータを安全にバインドするにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-06 03:09:12926ブラウズ

How to Safely Bind LIKE Parameters with Wildcards in PDO?

PDO での % ワイルドカードを使用した LIKE 値のバインド

PDO は、バインドされたパラメーターを使用して SQL クエリを実行する安全な方法を提供し、SQL インジェクションの脆弱性を防ぎます。 % などのワイルドカード文字を含む LIKE パラメーターをバインドする場合、混乱が生じる可能性があります。

以下のクエリでは、PDO:

select wrd from tablename WHERE wrd LIKE '$partial%'

を使用して変数 $partial% をバインドしようとしています。 PDO がそのようなバインディングをどのように処理するかを理解することが重要です。正しいアプローチは、特定の要件によって異なります。

オプション 1: 末尾に部分ワイルドカード (%) を使用してバインドします

はい、これは有効なオプションです:

select wrd from tablename WHERE wrd LIKE ':partial%'

ここで、:partial は $partial="somet" にバインドされます。

オプション 2: 部分ワイルドカードを使用してバインドします。 (%) 値の内部

次のアプローチも使用できます:

select wrd from tablename WHERE wrd LIKE ':partial'

ここで、:partial は $partial="somet%" にバインドされています。

代替: CONCAT 関数を使用します

必要に応じて、MySQL クエリ内で文字列の連結を実行できます。それ自体:

SELECT wrd FROM tablename WHERE wrd LIKE CONCAT(:partial, '%')

特殊文字の処理

単語の一部に %、_、または などの特殊文字が含まれている場合は、パラメーターをバインドする前に手動で特殊文字をエスケープする必要があります。次のコードはこれを示しています:

$stmt= $db->prepare("SELECT wrd FROM tablename WHERE wrd LIKE :term ESCAPE '+'");
$escaped= str_replace(array('+', '%', '_'), array('++', '+%', '+_'), $var);
$stmt->bindParam(':term', $escaped);

以上がPDO でワイルドカードを使用して LIKE パラメータを安全にバインドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。