複数のキーワードを元に、データベースから合致するデータだけを引き出したいのですが、うまくいきません。
例えば、”apple orange banana”という値が入力された場合、tableというテーブルのidカラムか、nameカラムのいずれかに、appleとorangeとbananaというキーワードを含んでいるデータだけを引き出したいのです。
表示されているエラー
__Parse error: syntax error, unexpected 'for' (T_FOR), expecting ']' in /home/vagrant/refoma/lib/Model/Model.php on line 189
__
Model.phpの下記の行にエラーが出ています。
for ($i=0; $i < count($str); $i++) {
入力フォームからスペースで区切られた文字列を得ます。
executeの中でfor文は使えないのでしょうか?
search.php
<form action="" method="post"> <p>キーワード検索:<input type="text" name="keyword" value="<?= isset($_POST['keyword']) ? h($_POST['keyword']) : ''; ?>"></p> <input type="submit" value="検索"> </form>
入力フォームから取得した文字列をスペースを元に配列に変換して、その配列を元にSQL文を組み立てる。
Model.php
$str = formatSpace($_POST['keyword']); $sql = "SELECT * FROM table WHERE "; for ($i=0; $i < count($str); $i++) { $sql .= $i === count($str)-1 ? "( id LIKE :keyword_".$i. " OR name LIKE :keyword_".$i.") ORDER BY id )" : "( id LIKE :keyword_".$i. " OR name LIKE :keyword_".$i.") AND"; } $stmt = $this->db->prepare( $sql ); $stmt->execute([ for ($i=0; $i < count($str); $i++) { $i === count($str)-1 ? " ':keyword_".$i ."' => '%".$str[$i]."%' " : " ':keyword_".$i."' => '%".$str[$i]."%' ,"; } ]); $stmt->setFetchMode(\PDO::FETCH_CLASS, 'stdClass'); return $stmt->fetchAll(); }
formatSpace()
function formatSpace($str){ $str = mb_convert_kana($str,'s','utf-8');//全角スペースを半角スペースに変換 $str = preg_replace('/[\r\n\t]/', ' ', $str);//タブや改行を半角スペースに変換 $str = preg_replace('/\s\s+/', ' ', $str);//複数連なったスペースを一つに変換 return explode(' ',$str); }
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/11 06:32
2017/10/11 06:50
2017/10/11 07:11