布尔模式匹配查询与动态反值,使用PHP MySQLi准备语句


Boolean Mode Where Match Query with Dynamic Against Values, using PHP MySQLi Prepared Statements

我想用mysqli prepared statements查询Where Match mysql。问题是Boolean Mode AGAINST values

正常:(+value1 +value2 +value IN BOOLEAN MODE)

但问题是,我不能在准备好的语句中使用它,例如(? ? ? IN BOOLEAN MODE),因为值的数量会有所不同,它不是固定的。

我试过这个代码:

$keywords = explode(" ", $SearchResults->squery);   
foreach($keywords as $key=>$value)
{
    $keywords[$key] = '+'.$value;
}
$keywords = implode(",", $keywords);
$dbconnect = new mysqli($host, $user, $pw, $db);
$stmt = $dbconnect->prepare("SELECT `postid` FROM `espina5_jotecodb`.`posttd` WHERE MATCH (`title`) AGAINST (? IN BOOLEAN MODE)"); 
$stmt->bind_param('s', $keywords)
if($stmt->execute())
{
    $stmt->bind_result($col1);
    while ($stmt->fetch()) 
    {
        echo $col1."<br>";
    }
}
$dbconnect->close();

$keywordsbind_param期间将有一个包含+value1 +value2 +value3的单个字符串

上面代码的问题是它不是单独读取值,而是作为一个整体,我认为这是因为在准备语句时单个?和绑定期间单个s。我以为我可以那样做,看来我错了。

因此,无论如何,上面的代码将导致读取第一个值而忽略后面的值,因为该值被视为单个值。所以我问我如何才能实现布尔模式的动态值准备语句查询?我应该针对每个值单独查询数据库吗?

你的做法不对。

normal: (+value1 +value2 +value IN BOOLEAN MODE)

它不是。通常必须是

('+value1 +value2 +value' IN BOOLEAN MODE)

在引号和中,不带逗号

与使用占位符相同:您必须在PHP中组装搜索字符串,然后通过单个占位符将其整个绑定。