2010-11-21 69 views
2

我發現如果我在MATCH AGAINST中使用WHERE語法不會替換傳遞的參數。例如,如果我運行下面的代碼 $MATCH AGAINST在Doctrine

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

單引號的使用似乎導致了問題 - 這個'concat(「'」,?,「*'」)'help? – ajreal 2010-11-21 16:32:05

+0

是的,它的工作原理。謝謝。 – Emanuel 2010-11-21 18:05:26

回答

0

導致問題的使用單引號的,
轉換它使用concat("'", ?, "*'")

2

在準備好的發言如上所述,佔位符不喜歡報價as shown in the doctrine manual.

所以,你可以簡單的寫:

$q->orWhere("MATCH (name, description) AGAINST (? IN BOOLEAN MODE)", $keywords_array[$i].'*');