Developer

【PHP応用】 PDO⑬ LIKEを使用する場合
2021.09.30
Lv2

【PHP応用】 PDO⑬ LIKEを使用する場合

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);

PHPWEBプログラミング講座 連載目次リンク

PHPWEBプログラミング講座 連載目次