1

我正在尝试对我的网站进行实时搜索。但是用于获取结果的 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

我相信对于您想要在 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 回答
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 回答