ホームページ >バックエンド開発 >PHPチュートリアル >PDO で LIKE 値を % 文字でバインドするにはどうすればよいですか?

PDO で LIKE 値を % 文字でバインドするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-16 16:59:03776ブラウズ

How to Bind LIKE Values with the % Character in PDO?

PDO での % 文字を使用した LIKE 値のバインド

PDO 駆動の SQL クエリでは、% ワイルドカード文字を含む LIKE 値をバインドする必要があることがよくあります。このような値をバインドすると、SQL インジェクションが確実に防止されます。ただし、そのための構文は混乱する可能性があります。

LIKE '%' を使用したクエリ: バインディングの考慮事項

次のクエリを考えてみましょう。

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

ここでは、次のようにします。 PDO を使用して変数 $partial をバインドします。 % 文字をバインドする方法を決定するときにジレンマが発生します。

バインドのオプション

オプション 1:

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

$ に :partial をバインドするPartial="somet".

オプション2:

select wrd from tablename WHERE wrd LIKE ':partial'

:partial を $partial="somet%" にバインドします。

オプション 3 (代替):

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

MySQL CONCAT を使用して文字列連結を実行するfunction.

特別な場合の考慮事項

検索対象の部分単語に % またはアンダースコア文字が含まれている場合は、特別な処理が必要です。解決策には、PDO ステートメントで ESCAPE 句を使用することが含まれます。

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

この手法により、LIKE 式内で特殊文字が正しく解釈されることが保証されます。

以上がPDO で LIKE 値を % 文字でバインドするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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