Подтвердить что ты не робот

Doctrine 2 Query with LIKE

У меня есть этот код для запроса:

$repository = $em->getRepository('AcmeCrawlerBundle:Trainings');
       $query = $repository->createQueryBuilder('p')
               ->where('p.title LIKE :word')
               ->orWhere('p.discription LIKE :word')
               ->setParameter('word', $word)
               ->getQuery();
$trainings = $query->getResult();

Проблема в том, что даже если совпадения существуют, они не найдены по этому запросу. Я использовал этот код, чтобы увидеть полный sql:

print_r(array(
        'sql'        => $query->getSQL(),
        'parameters' => $query->getParameters(),
        ));

И что у меня есть:

FROM Trainings t0_ WHERE t0_.title LIKE ? OR t0_.discription LIKE ? [parameters] => Array ( [word] => Spoken ) 

(последняя часть запроса) Скажите, пожалуйста, что изменить?

4b9b3361

Ответ 1

Вы забыли знаки % вокруг слова:

->setParameter('word', '%'.$word.'%')

Ответ 2

Выбранный ответ неправильный. Он работает, но он не безопасный.

Вам следует избегать термина, который вы вставляете между процентными знаками:

->setParameter('word', '%'.addcslashes($word, '%_').'%')

Знак процента '%' и символ подчеркивания '_' интерпретируются как символы подстановки LIKE. Если они не сбежались должным образом, злоумышленник мог бы построить arbirtarily сложные запросы, которые могут вызвать атаку отказа в обслуживании. Кроме того, злоумышленник может получить результаты поиска, которые он не должен получать. Более подробное описание сценариев атаки можно найти здесь: fooobar.com/info/200759/...