2010-11-21 15 views
2

Ich fand, dass, wenn ich MATCH AGAINST in Doctrine mit WHERE verwende, die Parameter nicht ersetzt, die bestanden werden. wenn ich zum Beispiel den folgenden Code $MATCH GEGEN in Lehre

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]); 
} 

keine Ergebnisse finden. Und wenn sie die Zeichenfolge verwenden, scheint die Verkettung zu funktionieren.

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

Ich benutze Doktrin 1.2.2.

Wer weiß, warum nicht die Parameter vor der Ausführung der SQL-Ausdruck ersetzen?

+0

die Verwendung von einfachen Anführungszeichen scheint das Problem zu verursachen - tut dies 'concat (" '",?," * ")' Hilfe? – ajreal

+0

Ja, es funktioniert. Vielen Dank. – Emanuel

Antwort

0

die Verwendung von Apostroph das Problem verursacht,
wandelt es wie oben concat("'", ?, "*'")

2

In vorbereiteten Anweisungen zu verwenden, die Platzhalter nicht wie zitiertas shown in the doctrine manual.

So könnte man einfach schreiben:

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