2013-07-18 1 views
6

Я использую doctrine2 с Symfony2, и я пытаюсь выполнить простой запрос на выборку:Doctrine2 [Синтаксис Error] Ошибка: Ожидаемая Буквальное, получил '-'

Я хочу работать:

SELECT * FROM table WHERE status in (1, -1) 

Этот PHP код:

$queryBuilder = $this->_em->createQueryBuilder(); 
     $queryBuilder 
     ->select('n') 
     ->from('MyBundle:Table', 'n') 
     ->where('n.status IN (1, -1)'); 
return $queryBuilder->getQuery()->getResult(); 

дает следующее исключение:

[Syntax Error] line 0, col 96: Error: Expected Literal, got '-' 

Это определение атрибута в сущности:

/** 
* @var integer 
* 
* @ORM\Column(name="status", type="integer", nullable=true) 
*/ 
private $status; 

Если я использую только положительные числа в пределах in аргумента, он будет работать. Исключение происходит только с отрицательными числами.

В чем причина этого исключения?

+0

прочерки не допускаются, поскольку они могут быть частью нападения инъекции SQL. Либо избавиться от тире, либо вывести отрицательное число в параметр. –

ответ

12

Если сделать трюк:

$queryBuilder = $this->_em->createQueryBuilder(); 
     $queryBuilder 
     ->select('n') 
     ->from('MyBundle:Table', 'n') 
     ->where('n.status IN (:status)') 
     ->setParameter('status', array(1, -1)); 
+3

Мне было интересно, почему вы должны установить параметр и в документации, которую я обнаружил, чтобы предотвратить внедрение SQL-инъекций. Вы можете найти документ [здесь] (http://symfony.com/doc/current/book/doctrine.html#querying-for-objects-with-dql) – NewRehtse

Смежные вопросы