PDO prepare语句并在布尔模式下进行匹配 [英] PDO prepare statement and match against in boolean mode
本文介绍了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屋!
查看全文