【发布时间】:2017-06-07 08:44:13
【问题描述】:
如果我通过直接输入从控制台运行这个简单的查询
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 准备我的陈述的方式。有什么想法吗?
【问题讨论】:
-
间距重要吗?在控制台中运行的查询在两个关键字之间有空格,而为 PDO 生成的查询会将所有关键字创建为仅由“+”分隔的单个字符串。
-
为适当的间距编辑。
-
控制台中的查询将所有关键字封装在引号中 (
'+php +mysql'),而您准备好的查询看起来像AGAINST (+php +mysql IN BOOLEAN MODE)- 也许就是这样?尝试使用单个占位符并将字符串构建为 1 个参数?