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



我正在尝试使用原则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,那么它运行没有任何错误,但什么也没返回。

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

基于对问题的评论推荐这里
其中指出不允许使用破折号,因为它们可能是 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();
}

相关内容

  • 没有找到相关文章