2

我发现如果我在 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 表达式之前不替换参数?

4

2 回答 2

2

在上述准备好的语句中,占位符不喜欢 教义手册中显示的引号。

所以你可以简单地写:

$q->orWhere("MATCH (name, description) AGAINST (? IN BOOLEAN MODE)", $keywords_array[$i].'*');
于 2012-04-03T07:08:17.730 回答
0

使用单引号导致问题,
将其转换为使用concat("'", ?, "*'")

于 2010-11-22T06:25:43.687 回答