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

PDO で LIKE 演算子を特殊文字と適切にバインドするにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-28 19:23:15505ブラウズ

How to Properly Bind LIKE Operators with Special Characters in PDO?

PDO バインディングでの LIKE 演算子の使用

PDO で LIKE 値をバインドすると、特殊文字 (「%」と「_」) が使用されているため、混乱を招く可能性があります。一致するパターン。この特定のクエリ:

SELECT wrd FROM tablename WHERE wrd LIKE '$partial%'

部分文字列 '$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, '%')

このオプションを使用すると、バインドされた値内の文字列連結を実行できます。 PHP コード内ではなく、MySQL クエリ。

特殊な処理文字

部分文字列に '%'、'_'、'' などの特殊文字が含まれている場合、それらを適切にエスケープするには、より複雑なメソッドが必要です。以下に例を示します:

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

このコードでは、特殊文字が MySQL によって正しく解釈されるように、特殊文字がエスケープ シーケンス (' '、' %'、および ' _') に置き換えられます。

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

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