绑定多个参数匹配与全文搜索


Bind multiple parameters match against fulltext search

我正在实现一个基于标签的搜索功能,我有以下 SQL 来匹配其中一个表中tags列中的关键字。

例:

row 1 tags column:   car city night
row 2 tags column:   truck city day

.SQL:

WHERE MATCH(s.tags) AGAINST (+:keyword IN BOOLEAN MODE)

但是,如果用户搜索多个以空格分隔的关键字,例如"汽车城...",则查询应为:

WHERE MATCH(s.tags) AGAINST ('+:keyword1 +:keyword2 +...' IN BOOLEAN MODE)

目前我只有

$stmt->bindParam(":keyword", $keyword);

这不会产生我想要的,我相信它会产生:

WHERE MATCH(s.tags) AGAINST (+'keyword1 keyword2 ...' IN BOOLEAN MODE)

当关键字数量未知时,我将如何单独绑定每个关键字以生成该关键字?还是有别的办法?

我相信

我能够解决它。

使用单个占位符:

WHERE MATCH(s.tags) AGAINST (:keyword IN BOOLEAN MODE)

将关键字拆分为以空格分隔的单词数组:

$keywords = preg_split('/'s+/', $keyword);
$numKeywords = count($keywords);

然后在绑定参数时,将每个关键字与加号连接起来:

for ($i = 0; $i < $numKeywords; $i++){
  $keywordBind .= "+".$keywords[$i]." ";
}
$stmt->bindParam(":keyword", $keywordBind);