我正在使用预处理语句在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