МАТЧА ПРОТИВ в Доктрине - PullRequest
       35

МАТЧА ПРОТИВ в Доктрине

2 голосов
/ 21 ноября 2010

Я обнаружил, что если я использую MATCH AGAINST в Doctrine с синтаксисом 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?

Ответы [ 2 ]

2 голосов
/ 03 апреля 2012

В подготовленных утверждениях, как указано выше, заполнитель не любит кавычки , как показано в руководстве по доктрине.

Так что вы можете просто написать:

$q->orWhere("MATCH (name, description) AGAINST (? IN BOOLEAN MODE)", $keywords_array[$i].'*');
0 голосов
/ 22 ноября 2010

использование одинарных кавычек, вызывающих проблему,
преобразовать его в использование concat("'", ?, "*'")

...