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

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

Patricia Arquette
リリース: 2024-12-06 03:09:12
オリジナル
894 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート