我正在尝试使用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,那么它会在没有任何错误的情况下运行,但不返回任何内容。
有人能指出我正确的方向吗?
答案 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();
}