PDO 駆動の SQL クエリでは、% ワイルドカード文字を含む LIKE 値をバインドする必要があることがよくあります。このような値をバインドすると、SQL インジェクションが確実に防止されます。ただし、そのための構文は混乱する可能性があります。
次のクエリを考えてみましょう。
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 サイトの他の関連記事を参照してください。