PDO prepare语句并在布尔模式下进行匹配 [英] PDO prepare statement and match against in boolean mode

查看:44
本文介绍了PDO prepare语句并在布尔模式下进行匹配的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我通过直接输入从控制台运行此简单查询

If I run this simple query from the console by directly typing

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

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

I get plenty of results. Now I'm trying to prepare this statement in 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准备语句的方式.有什么主意吗?

This script only returns results if only 1 keyword is used. With 2 keywords, it returns no value and no error (but works in the console). So I suspect it's the way I prepare my statement with pdo. Any idea?

推荐答案

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

You should simply create a statement like this:

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

然后绑定参数:

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

这篇关于PDO prepare语句并在布尔模式下进行匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆