【问题标题】:Boolean Mode Where Match Query with Dynamic Against Values, using PHP MySQLi Prepared Statements布尔模式,其中使用 PHP MySQLi 准备语句将查询与动态值匹配
【发布时间】:2013-04-29 05:37:42
【问题描述】:

我想通过Where Match 使用mysqli prepared statements 查询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。我以为我可以那样做,我想我错了。

所以无论如何,上面的代码将导致读取第一个值并忽略后续值,因为该值被视为单个值。所以我在问如何使用布尔模式的动态值实现准备好的语句查询?我应该求助于每个值单独查询数据库吗?

【问题讨论】:

  • 我会尝试寻找它。感谢您的提示@YourCommonSense

标签: php mysqli prepared-statement dynamic-programming


【解决方案1】:

你做错了。

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

它不是。 通常必须是

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

引号和不带逗号

使用占位符也是如此:您必须在 PHP 中组装搜索字符串,然后通过单个占位符将其整体绑定。

【讨论】:

    猜你喜欢
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 2023-04-07
    • 2020-05-03
    相关资源
    最近更新 更多