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 に答える