1

Web サイトをライブ検索しようとしていますが、結果を取得するための mysqli 準備済みステートメントが機能していません。次のコードがあります。

$value = $_POST['value'];
$query = $db->prepare("
select title from forums where title IN(?)
");
$value = explode(' ',$value);
$value = "'" . implode("','", $value) . "'";
$query -> bind_param('s',$value);
$query -> execute();
$query -> store_result();
$number = $query -> num_rows();
if($number == 0){
echo "No results found.";
}else{
    $query -> bind_result($title);
while($query -> fetch()){
    echo $title.'<hr>';
}

検索フレーズに含まれる単語の数がわからないため、使用できません。

IN(?,?,?,...)

フォーラム テーブルに「これはテスト フォーラムです」というタイトルのレコードがあります。しかし、名前を入力しても結果が表示されません。準備されたステートメントを正しく実行していますか?助けてください

アップデート

回答してコメントしてくれたすべての人に感謝します。私は最終的に次のコードを使用することになりました:

   $value = $_POST['value'];
   $query = $db->prepare("
     select title from forums where match(title) against(?) OR name LIKE CONCAT('%',?,'%')
   ");
   $query -> bind_param('ss',$value,$value);
   $query -> execute();
   $query -> store_result();
   $numrows = $query -> num_rows();
   if($numrows == 0){
     echo "No results found";
   }
   else{
     $query -> bind_result($title);
     while($query -> fetch()){
       echo '<hr>';
       echo $title;
       echo '<hr>';
     }
   }
4

2 に答える 2

0

このようなものがうまくいくかもしれません:

$value = explode(' ',$value);
#you might want to check size of value?
$qmark = str_repeat("?,", count($value)-1) . "?";
$query = $db->prepare("select title from forums where title IN(" . $qmark . ")");
foreach ($value as $item){
    $query->bind_param('s', $item);
}
于 2013-08-24T07:17:14.250 に答える
0

IN に必要な各アイテムには ? が必要だと思います。例: IN(?,?,?...)。

交換

$value = explode(' ',$value);
$value = "'" . implode("','", $value) . "'";
$query -> bind_param('s',$value);

$value = explode(' ',$value);
$valuestr = "";
foreach($value as $val) {
  $valuestr .= "'" . $val . "',";
}
$valuestr=substr($valuestr,0,-1);
$query -> bind_param('s',$valuestr);
于 2013-08-24T07:09:08.473 に答える