Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major 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

        Activity

        Hide
        Roman S. Borschel added a comment -

        This:

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

        is the same as this:

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

        is the same as this:

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

        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));
        

        or

        $query->setParameter(1, $id);
        $query->execute(); // or $query->getResult()
        
        Show
        Roman S. Borschel added a comment - This: $query->execute(array($id)); is the same as this: $query->execute(array(0 => $id)); is the same as this: $query->setParameter(0, $id); $query->execute(); 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)); or $query->setParameter(1, $id); $query->execute(); // or $query->getResult()
        Hide
        Matt Curcio added a comment -

        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.

        Show
        Matt Curcio added a comment - 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.
        Hide
        Roman S. Borschel added a comment -

        Fixed now. A meaninfgul exception is thrown.

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

        Show
        Roman S. Borschel added a comment - Fixed now. A meaninfgul exception is thrown. Starting from 0 would be unintuitive as even PDO starts to count from 1.

          People

          • Assignee:
            Roman S. Borschel
            Reporter:
            Matt Curcio
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: