2010-11-21 10 views
2

DoctrineでMATCH AGAINSTを使用すると、渡されたパラメータがWHERE構文で置き換えられないことがわかりました。たとえば、私は、任意の結果を見つけることができません。次のコード $DoctrineのMATCH AGAINST

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( "'、?、" * '")'は役に立ちますか? – ajreal

+0

はい、動作します。ありがとう。 – Emanuel

答えて

0

問題の原因単一引用符の使用、
は、上記のように準備された文ではconcat("'", ?, "*'")

2

を使用するように変換し、プレースホルダは、だから、あなたは、単に書くことができる重引用符as shown in the doctrine manual.

が好きではありません。

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