2013-07-18 9 views
6

Sto usando Doctrine2 con Symfony2 e sto cercando di eseguire una semplice query di selezione:Doctrine2 [Errore di sintassi] Errore: Previsto letterale, ha '-'

voglio correre:

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

Questo codice PHP:

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

ha pronunciato la seguente eccezione:

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

Questa è la definizione di attributo all'interno dell'entità:

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

Se io uso solo numeri positivi all'interno l'argomento in, funzionerà. L'eccezione si verifica solo con numeri negativi.

Che cosa causa questa eccezione?

+0

I trattini non sono ammessi come potrebbero essere parte di un attacco SQL injection. O eliminare il trattino o scomporre il numero negativo in un parametro. –

risposta

12

dovrebbe fare il trucco:

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

Mi chiedevo il motivo per cui devi impostare un parametro e nella documentazione ho scoperto che è per prevenire le Iniezioni SQL. Puoi trovare il documento [qui] (http://symfony.com/doc/current/book/doctrine.html#querying-for-objects-with-dql) – NewRehtse

Problemi correlati