PDO で LIKE 値をバインドすると、特殊文字 (「%」と「_」) が使用されているため、混乱を招く可能性があります。一致するパターン。この特定のクエリ:
SELECT wrd FROM tablename WHERE wrd LIKE '$partial%'
部分文字列 '$partial%' をバインドするためのオプションがいくつかあります:
SELECT wrd FROM tablename WHERE wrd LIKE ':partial%'
ここで、パラメータ ':partial' は次のようにバインドされています。 '$partial="somet"'、ワイルドカード '%' を文字列の末尾に追加します。
SELECT wrd FROM tablename WHERE wrd LIKE ':partial'
この場合、パラメータ「:partial」はワイルドカードを含む「$partial="somet%"」にバインドされています。
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 サイトの他の関連記事を参照してください。