Details
-
Type:
Bug
-
Status:
Closed
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: 2.0-ALPHA3
-
Fix Version/s: 2.0-ALPHA3
-
Component/s: ORM
-
Security Level: All
-
Labels:None
Description
It seems as though the query parameters start from '1' (?0 throws an exception), whereas the Query#_prepareParams function starts counting from 0.
Code:
$query = $this->em->createQuery('SELECT s FROM Session s WHERE s.id = ?1');
echo $query->getSQL();
$session = $query->execute(array($id));
print_r($session);
Output:
SELECT s0_.id AS id0, s0_.data AS data1, s0_.created AS created2, s0_.accessed AS accessed3 FROM Session s0_ WHERE s0_.id = ?
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 s0_.id A...')
#1 Doctrine/ORM/Query/Exec/SingleSelectExecutor.php(42): Doctrine\DBAL\Connection->execute('SELECT s0_.id 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/tec-expo.com/development/libraries/Doctrine/DBAL/Connection.php on line 602
This:
is the same as this:
is the same as this:
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:
or
$query->setParameter(1, $id); $query->execute(); // or $query->getResult()