用LIKE进行Doctrine 2查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用LIKE进行Doctrine 2查询相关的知识,希望对你有一定的参考价值。

我有这个代码用于查询:

$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 ) 

(查询的最后一部分)请告诉我要改变什么?

答案

你忘记了世界各地的qazxsw poi标志:

%
另一答案

选择的答案是错误的。它有效,但不安全。

你应该逃避在百分号之间插入的术语:

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

->setParameter('word', '%'.addcslashes($word, '%_').'%') 将百分号“%”和符号下划线“_”解释为通配符。如果它们没有正确转义,攻击者可能会构建可能导致拒绝服务攻击的异常复杂的查询。此外,攻击者可能会获得他不应该获得的搜索结果。有关攻击情形的更详细说明,请访问:LIKE

以上是关于用LIKE进行Doctrine 2查询的主要内容,如果未能解决你的问题,请参考以下文章

Doctrine2 “Like” SQL 查询和“Class true 不存在”错误

Doctrine 和 LIKE 查询

Doctrine 的 findBy*() 中的 LIKE 和 % 通配符

Doctrine and Symfony2: WHERE a.title LIKE $array

如何在 Doctrine 2 中对本机查询进行分页?

带有 LIKE 的 Symfony Sonata SEO 自定义 sql 查询