我发现如果我在Doctrine中使用MATCH AGAINST并且WHERE语法不会替换传递的参数。例如,如果我运行以下代码 $
q = Doctrine_Query::create()
->select('*')
->from('TourismUnit tu')
->where('FALSE');
if ($keywords) {
$keywords_array = $this->parse_keywords($keywords);
for ($i = 0; $i < sizeof($keywords_array); $i++)
$q->orWhere("MATCH (name, description) AGAINST ('?*' IN BOOLEAN MODE)", $keywords_array[$i]);
}
找不到任何结果。 如果他们使用字符串连接似乎工作。
$q->orWhere("MATCH (name, description) AGAINST ('".$keywords_array[$i]."*' IN BOOLEAN MODE)");
我使用Doctrine 1.2.2。
有谁知道为什么不在执行sql表达式之前替换参数?
答案 0 :(得分:2)
在上述准备好的陈述中,占位符不喜欢引号 as shown in the doctrine manual.
所以你可以写一下:
$q->orWhere("MATCH (name, description) AGAINST (? IN BOOLEAN MODE)", $keywords_array[$i].'*');
答案 1 :(得分:0)
concat("'", ?, "*'")