0

我正在使用准备好的语句在 IN() 中构建具有多个值的 MySQLi 全文搜索。

该脚本适用于 IN() 中的单个值,但不适用于多个值。

代码

$keyword = "+$keyword*";
$search = 'Games';

$query = "SELECT id, title FROM $tablename WHERE category IN(?) AND MATCH (title) AGAINST ( ? IN BOOLEAN MODE)";
$prepare = mysqli_prepare($connection, $query);
mysqli_stmt_bind_param($prepare, "ss", $search, $keyword);
mysqli_stmt_execute($prepare);
mysqli_stmt_bind_result($prepare, $id, $title);
while(mysqli_stmt_fetch($prepare)){
echo $id.' '.$title.'<br />';
}
mysqli_stmt_close($prepare);

上面的代码不适用于多个值,例如。

$search = "'Software', 'Games'";

我想我需要做类似的事情。

$IN = rtrim(str_repeat('?, ', count($search)), ', ') ;
$query = "SELECT id, title FROM $tablename WHERE category IN($IN) AND MATCH (title) AGAINST ( ? IN BOOLEAN MODE) ";

现在如何处理这些部分。

mysqli_stmt_bind_param($prepare, "ss", $search, $keyword);
mysqli_stmt_execute($prepare);

随着绑定参数随着多个值的增加而增加。

请查看并建议任何可能的方法来做到这一点。

谢谢。

更新

我试过这样

$search = array('Software', 'Games');
$IN = rtrim(str_repeat('?, ', count($search)), ', ') ;
$search[]=$keyword;

$query = "SELECT id, title FROM $tablename WHERE category IN($IN) AND MATCH (title) AGAINST ( ? IN BOOLEAN MODE) ";

$prepare = mysqli_prepare($connection, $query);
mysqli_stmt_execute($search);
mysqli_stmt_bind_result($prepare, $id, $title);
while(mysqli_stmt_fetch($prepare)){
echo $id.' '.$title.'<br />';
}
mysqli_stmt_close($prepare);

但它没有用,它给了我错误 mysqli_stmt_execute() expects parameter 1 to be mysqli_stmt, array given

4

0 回答 0