- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:like検索の複数キーワードで、プレースホルダを利)
like検索の複数キーワードで、プレースホルダを利用する方法
このQ&Aのポイント
- like検索の複数キーワードで、プレースホルダを利用する方法を教えてください
- 現在は単語のキーワード検索ができていますが、複数キーワードを配列として処理する方法がわかりません
- 現在のコードでは、ワイルドカードを利用して単語の部分一致検索をしています
- みんなの回答 (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);
お礼
回答ありがとうございました。おかげで完璧に動作するようになりました! >foreach ($keyword as $val) { >$where[] = '(honbun like ?)'; >$bind[] = '%' . $val . '%'; >} >$sql .= ' where ' . implode('and', $where); 特に、ここら辺が参考になりましたー