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