mirror of
https://github.com/doctrine/orm.git
synced 2026-03-23 22:42:18 +01:00
DDC-921: QueryBuilder: Defining a "WHERE IN (...)" constraint using QueryBuilder::expr()->in() doesn't allow parameter binding for array of values #1143
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @doctrinebot on GitHub (Dec 9, 2010).
Originally assigned to: @beberlei on GitHub.
Jira issue originally created by user markus.woessner:
Following statement issues Doctrine\ORM\Query\QueryException:
$qb = new Doctrine\ORM\QueryBuilder($em);
$qb
->select('u')
->from('Entities\User', 'u')
->where($qb->expr()->in('u.name', array('?1', '?2')))
->setParameters(array(1 => 'Hans', 2 => 'Lieselotte'))
->getQuery()->execute();
Doctrine\ORM\Query\QueryException: "Invalid parameter number: number of bound variables does not match number of tokens."
$qb->getDql() will return "SELECT u FROM Entities\User u WHERE u.name IN('?1', '?2')"
As you can see placeholder variables are quoted due to Doctrine\ORM\Query\Expr::in($x, $y) which expects $y to be an array of Expr\Literal instances. Otherwise it will quote given strings. I can't think that doing something like...
$qb->where($qb->expr()->in('u.name', array(new Expr\Literal('?1'), new Expr\Literal('?2'))))
... is very convenient syntax. Is it?