Orm DQL动态参数顺序原则

Orm DQL动态参数顺序原则,orm,doctrine,sql-order-by,dql,Orm,Doctrine,Sql Order By,Dql,我试图在DQL中将ORDER BY列作为参数传递,如下所示: $this->em->createQuery("SELECT t FROM Entities\Topic t ORDER BY :order") ->setParameters( array('order' => 't.name') )->getResult(); 我猜它不起作用,因为setParameter将转义:order,但是下面的解决方案似乎不是很好: $order = 't.name

我试图在DQL中将ORDER BY列作为参数传递,如下所示:

$this->em->createQuery("SELECT t FROM Entities\Topic t ORDER BY :order")
     ->setParameters( array('order' => 't.name') )->getResult();
我猜它不起作用,因为setParameter将转义:order,但是下面的解决方案似乎不是很好:

$order = 't.name'; // Dynamic value
$this->em->createQuery("SELECT t FROM Entities\Topic t ORDER BY $order")
     ->getResult();

有更好的方法解决这个问题吗?

在这种情况下,请使用理论:


@如果这个回答伤害了你的感情,丹尼斯很抱歉;)不,说真的-如果您有一个动态构建的查询-这是查询生成器的一个实际用例。但另一方面,我认为你的解决方案实际上是可行的。我不会做变量插值,那看起来太不清楚了。如果我是你,只需执行:
->createQuery('SELECT t FROM Entities\Topic t ORDER BY'.$ORDER)
并完成它。@Max,这样做可以避免SQL注入吗@LucianoMammino不你应该有一个白名单values@Max,我刚刚和一位朋友讨论了这个话题,他明确指出,谈论“DQL注入”会更好。无论如何,我们都同意白名单是这种情况下最好的解决方案。
$order = 't.name'; // Dynamic value

$qb = $this->_em->createQueryBuilder();
$qb->select('t')
   ->from('Entities\Topic', 't')
   ->orderBy($order);