PDOのWHERE句で、LIKEを使う場合を紹介します。
(参考: SQLのLIKE自体の解説)
LIKE演算子を使うには、ワイルドカードの"%"が必要ですが、
PHPのPDO内でこのワイルドカードを使うためには、ひと工夫必要です。
"%"とプレースホルダーの組み合わせ方と、"%"のエスケープ法を解説します。
%の正しいつけ方
×ダメな例
名前付きプレースホルダーの前後に、直接%を使うことはできません。
$sql = "select * from sample where name like '%:keyword%'";
○OKな例
文字列結合で埋め込んであげる必要があります。
// $keywordを"%"で挟んであげる $keyword = "%".$keyword."%"; // $sqlを設定 $sql = "select * from sample where name like :keyword"; // 値をバインド $stmt->bindParam(':keyword',$keyword, PDO::PARAM_STR);
「%」と「_」はエスケープ
LIKE検索で「%」と「\_」は特殊な意味を持つので、エスケープが必要です。
以下では、エスケープ文字として"#"を使っています。
エスケープが必要なすべての文字("_", "%", "#")の頭に、"#"を付け足し、
$sql内部のSQL句で、"#"をエスケープ文字にすることを宣言しています。("escape '#'")
$keyword = mb_ereg_replace('([_%#])', '#¥1', $keyword]); $sql = "select * from sample where name like :keyword escape '#'"; $stmt->bindParam(':keyword',$keyword, PDO::PARAM_STR);