条令2 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 ) 

(查询的最后部分)请告诉我该换什么?

您忘记了单词周围的%符号:

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

以下是进一步净化输入数据的一些附加步骤。

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

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

百分比符号"%"和符号下划线"_"被LIKE解释为通配符。如果未正确转义,攻击者可能会构造任意复杂的查询,从而导致拒绝服务攻击。此外,攻击者可能会得到他不应该得到的搜索结果。攻击场景的更详细描述可以在这里找到:https://stackoverflow.com/a/7893670/623685

相关内容

  • 没有找到相关文章

最新更新