AlO*_*l19 40 sql symfony doctrine-orm
我有这个代码用于查询:
$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();
Run Code Online (Sandbox Code Playgroud)
问题是:即使存在匹配项,此查询也找不到它们.我用这段代码来查看完整的sql:
print_r(array(
        'sql'        => $query->getSQL(),
        'parameters' => $query->getParameters(),
        ));
Run Code Online (Sandbox Code Playgroud)
我得到了什么:
FROM Trainings t0_ WHERE t0_.title LIKE ? OR t0_.discription LIKE ? [parameters] => Array ( [word] => Spoken ) 
Run Code Online (Sandbox Code Playgroud)
(查询的最后一部分)请告诉我要改变什么?
Eln*_*mov 90
你忘了%这个词周围的标志:
->setParameter('word', '%'.$word.'%')
Run Code Online (Sandbox Code Playgroud)
        rob*_*ert 15
选择的答案是错误的。它可以工作,但是并不安全。
您应避免在百分号之间插入的术语:
->setParameter('word', '%'.addcslashes($word, '%_').'%')
Run Code Online (Sandbox Code Playgroud)
百分号'%'和下划线符号'_'被解释为通配符LIKE。如果他们不正确转义,攻击者可能构造arbirtarily复杂的查询,可能会导致服务拒绝攻击。同样,攻击者可能会获得他不应该获得的搜索结果。攻击场景更详细的描述可以在这里找到:/sf/answers/552556931/
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           55121 次  |  
        
|   最近记录:  |