Doctrine SUBSTRING_INDEX扩展在查询生成器中吐出错误

时间:2017-05-22 19:23:51

标签: php symfony doctrine-orm

我正在尝试使用doctrine SUBSTRING_INDEX 扩展名来选择通过以下查询从帐号中进行的所有转移。 t.fromAccount 是一个文本字段,例如。 " 黄金活期账户 - 25547845965851 "。帐号是在破折号之后。

  public function findTransfersByAccountNumber($accountNumber)
{
    $qb = $this->getTransferQuery()
               ->leftJoin('t.customer', 'c')
               ->where("SUBSTRING_INDEX(t.fromAccount, '-', -1) = :accountNumber")
               ->orderBy('t.dateCreated','DESC')
               ->setParameter('accountNumber',$accountNumber);
    return $qb->getQuery()->getResult();        
}

但是,学说吐出了这个错误" [语法错误]第0行,第117栏:错误:预期的文字,得到了' "。奇怪的是,如果我将-1更改为1,那么它会在没有任何错误的情况下运行,但不返回任何内容。

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

根据对问题的评论推荐 here
其中声明不允许破折号,因为它们可能是SQL注入攻击的一部分。要么摆脱破折号,要么将负数分解为参数。以下代码按预期工作。

public function findTransfersByAccountNumber($accountNumber)
{
    return $this->getTransferQuery()
        ->leftJoin('t.customer', 'c')
        ->where("SUBSTRING_INDEX(t.fromAccount, '-', :offset) = :accountNumber")
        ->orderBy('t.dateCreated','DESC')
        ->setParameter('accountNumber',$accountNumber)
        ->setParameter('offset','-1')
        ->getQuery()->getResult();

}