php - PDO 准备语句并以 bool 模式进行匹配

标签 php mysql pdo

如果我通过直接键入从控制台运行这个简单的查询

 SELECT COUNT(*) AS total FROM articles WHERE MATCH(title) AGAINST ('+php +mysql' IN BOOLEAN MODE)

我得到了很多结果。 现在我正在尝试在 php 中准备此语句。

$keywords = ['php', 'mysql'];
$against = '';
for($i = 0; $i < count($keywords); $i++){
    $against .= '+? ';  
}
$query = 'SELECT COUNT(*) AS total FROM articles WHERE MATCH(title) AGAINST ('.$against.' IN BOOLEAN MODE)';

//my query is now 'SELECT COUNT(*) AS total FROM articles WHERE MATCH(title) AGAINST (+? +?  IN BOOLEAN MODE)'

$stmt = $pdo->prepare($query);
$stmt->execute($keywords);

此脚本仅在仅使用 1 个关键字时返回结果。使用 2 个关键字时,它不会返回任何值,也不会出现错误(但可以在控制台中运行)。所以我怀疑这是我用 pdo 准备声明的方式。有什么想法吗?

最佳答案

您应该简单地创建一个如下的语句:

$query = 'SELECT COUNT(*) AS total FROM articles WHERE MATCH(title) AGAINST (:query IN BOOLEAN MODE)';
$stmt = $pdo->prepare($query);

然后绑定(bind)参数:

$keywords = ['php', 'mysql'];
$against = '';
for($i = 0; $i < count($keywords); $i++){
    $against .= ' +' . $keywords[$i];   
}
$stmt->execute(array(
    ':query' => $against
));

关于php - PDO 准备语句并以 bool 模式进行匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41796205/

相关文章:

javascript - 每 x 分钟运行一个 php 脚本(无 cron)

php - Laravel 多对多关系获取数据

MySQL 在两个(或多个)给定值中选择最小值/最大值

php - 每个关键字 10 条记录 SQL

PHP 将数组传递给 PDO bindParam

php - laravel3 中的路由无法正常工作

php - Wordpress WooCommerce 商店 - 产品标题下的副标题

mysql - mysql。在单列中查找倍数

php - 调用未定义的方法 DbConn::prepare()

php - 修改/添加额外的东西到 PDO bindParam()?