繁体   English   中英

PDO 准备语句并在布尔模式下匹配

[英]PDO prepare statement and match against in boolean mode

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

 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);

然后绑定参数:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM