• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:like検索の複数キーワードで、プレースホルダを利)

like検索の複数キーワードで、プレースホルダを利用する方法

このQ&Aのポイント
  • like検索の複数キーワードで、プレースホルダを利用する方法を教えてください
  • 現在は単語のキーワード検索ができていますが、複数キーワードを配列として処理する方法がわかりません
  • 現在のコードでは、ワイルドカードを利用して単語の部分一致検索をしています

質問者が選んだベストアンサー

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

プレースホルダを使うにしても使わないにしても、SQL文を組み立てる時点ではキーワードの数は既知のハズです(空白やカンマでexplodeするなどの前処理は終わっているハズです)。 なので、必要な数だけプレースホルダを生成すればいいと思います。 // キーワードの組み立て $temp = explode(' ', $_POST['keyword']); $keyword = array(); foreach ($temp as $val) { if (trim($val) !== '') { $keyword[] = $val; } } if (count($keyword) === 0) { die('no keyword'); } // 適宜処理するww $sql = 'select * from a'; $where = array(); $bind = array(); $i = 0; foreach ($keyword as $val) { $where[] = '(honbun like ?)'; $bind[] = '%' . $val . '%'; } $sql .= ' where ' . implode('and', $where); // デバッグ用ここから print $sql . "<hr />"; print_r($bind); exit; // デバッグ用ここまで $stmt = $dbh->prepare($sql); $stmt->execute($bind);

re999
質問者

お礼

回答ありがとうございました。おかげで完璧に動作するようになりました! >foreach ($keyword as $val) { >$where[] = '(honbun like ?)'; >$bind[] = '%' . $val . '%'; >} >$sql .= ' where ' . implode('and', $where); 特に、ここら辺が参考になりましたー