教义 setParameter 和无效参数号
Posted
技术标签:
【中文标题】教义 setParameter 和无效参数号【英文标题】:Doctrine setParameter and Invalid parameter number 【发布时间】:2013-04-15 14:28:49 【问题描述】:经过多次尝试,我想我终于把文档牢记在心了。 然后,我需要你的帮助.. 我不明白为什么 Doctrine 会显示这个错误:
无效的参数号:绑定变量的数量不匹配 代币数量
这是我的代码:
$qb = $this->em->createQueryBuilder();
$qb->select('m')
->from('Entities\Marque', 'm')
->leftJoin('m.magasin', 'ma')
->where('m.nom = :marque AND ma.nom LIKE :magasin')
->setParameter('marque', $marque)
->setParameter('magasin', '%'.$matchesNumber[1].'%');
$results = $qb->getQuery()->getArrayResult();
提前感谢您的回答。
【问题讨论】:
你可能会在稍后调用 $db->where 吗?这将覆盖现有的 where 语句。 不,这是 where 语句的唯一用途。$marque
和 $matchesNumber[1]
不为空吗?
【参考方案1】:
如果您不小心使用了多个where()
,也会发生这种情况,我曾经发生过这种情况。
$em = $this->getEntityManager();
$query = $em->createQueryBuilder()
->from('AppBundle:SomeEntity', 's')
->select('s')
->where('s.foo = :foo')
->where('s.bar = :bar') // <- HERE
->setParameter('foo', 'Foo Value')
->setParameter('bar', 'Bar Value');
应该是:
$em = $this->getEntityManager();
$query = $em->createQueryBuilder()
->from('AppBundle:SomeEntity', 's')
->select('s')
->where('s.foo = :foo')
->andWhere('s.bar = :bar') // <- CHANGE TO andWhere()
->setParameter('foo', 'Foo Value')
->setParameter('bar', 'Bar Value');
希望这对某人有所帮助。
【讨论】:
【参考方案2】:我认为 ->setParameter 会覆盖前一个。
对于多个参数使用:
->setParameters(['key1' => $value1, 'key2' => $value2])
参见教义升级:
从现在开始,查询中的参数是一个 ArrayCollection 而不是一个简单的数组。这 > 严重影响了 setParameters() 的使用,因为它不会追加任何参数 > 查询,但实际上会覆盖已经定义的参数。每当您检索 > 参数时(即 $query->getParameter(1))
Doctrine Upgrade Description
也许这也适用于 setParameter?
【讨论】:
我已经尝试过->setParameters(['marque' => $marque, 'magasin' => '%'.$matchesNumber[1].'%']);
但没有任何变化..【参考方案3】:
我很抱歉 .. 我刚刚发现了我的错误 .. 稍后,就像我的代码后面的更多内容 .. 我用旧的 "$qb" 键入了一个新查询.. 我真是个菜鸟!
【讨论】:
【参考方案4】:$qb = $this->em->createQueryBuilder();
$parameters = array('marque'=>$marque, 'magasin'=>'%'.$matchesNumber[1].'%');
$qb->select('m')
->from('Entities\Marque', 'm')
->leftJoin('m.magasin', 'ma')
->where('m.nom = :marque')
->andWhere('ma.nom LIKE :magasin')
->setParameters($parameters);
$results = $qb->getQuery()->getArrayResult();
【讨论】:
以上是关于教义 setParameter 和无效参数号的主要内容,如果未能解决你的问题,请参考以下文章
Symfony 4,Postgres - 在运行教义命令时`参数“client_encoding”的无效值:“utf8mb4”`