MySQLi使用预处理语句在IN()中使用多个值进行全文搜索

时间:2013-06-29 06:48:26

标签: php full-text-search prepared-statement

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

0 个答案:

没有答案