Skip to content


DDC-55: Query paramater mapping error #5056

doctrinebot opened this Issue · 5 comments

1 participant


Jira issue originally created by user mcurcio:

It seems as though the query parameters start from '1' (?0 throws an exception), whereas the Query#_prepareParams function starts counting from 0.

$query = $this->em->createQuery('SELECT s FROM Session s WHERE = ?1');

echo $query->getSQL();

$session = $query->execute(array($id));

SELECT AS id0, AS data1, s0_.created AS created2, s0_.accessed AS accessed3 FROM Session s0_ WHERE = ?

Warning: Invalid argument supplied for foreach() in Doctrine/ORM/Query.php on line 222

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?' at line 1' in Doctrine/DBAL/Connection.php:602
Stack trace:
#0 Doctrine/DBAL/Connection.php(602): PDO->query('SELECT A...')
#1 Doctrine/ORM/Query/Exec/SingleSelectExecutor.php(42): Doctrine\DBAL\Connection->execute('SELECT A...', Array)
#2 Doctrine/ORM/Query.php(198): Doctrine\ORM\Query\Exec\SingleSelectExecutor->execute(Object(Doctrine\DBAL\Connection), Array)
#3 Doctrine/ORM/AbstractQuery.php(461): Doctrine\ORM\Query->_doExecute(Array)
#4 classes/SessionManager.php(35): Doctrine\ORM\AbstractQuery->execute(A in /var/www/ on line 602


Comment created by romanb:



is the same as this:

$query->execute(array(0 => $id));

is the same as this:

$query->setParameter(0, $id);

Hence the error. We should probably check for isset($params[0]) in execute() and throw an exception in this case.

To get it to work, either use:

$query->execute(array(1 => $id));


$query->setParameter(1, $id);
$query->execute(); // or $query->getResult()

Comment created by mcurcio:

While I have since discovered the "colon-mapping" scheme, for the users who would prefer this mapping method, why not allow the zero position? Starting the count from zero would allow the simple execute() mechanism that I was trying, and while not very clear, might be useful for certain cases.


Comment created by romanb:

Fixed now. A meaninfgul exception is thrown.

Starting from 0 would be unintuitive as even PDO starts to count from 1.


Issue was closed with resolution "Fixed"

@doctrinebot doctrinebot added this to the 2.0-ALPHA3 milestone
@doctrinebot doctrinebot closed this
@doctrinebot doctrinebot added the Bug label
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.