2013-07-18 3 views
6

내가 symfony2와 doctrine2 사용하고 내가 간단한 선택 쿼리 수행하기 위해 노력하고 있습니다 :Doctrine2 [구문 오류] 오류 : 리터럴 예상은있어 '-'

I 실행할을 :

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

이 PHP 코드 :

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

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

는 다음과 같은 예외를 제공합니다

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

나는 in 인수 내에서만 긍정적 인 숫자를 사용하는 경우, 그것은 작동합니다

이 기업 내에서 속성 정의입니다. 예외는 음수에서만 발생합니다.

이 예외의 원인은 무엇입니까?

+0

대시는 허용되지 않습니다. 대쉬를 없애거나 음수를 매개 변수로 분리하십시오. –

답변

12

트릭을 수행해야합니다 그들이 SQL 인젝션 공격의 일부가 될 수 있기

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

왜 매개 변수를 설정해야하는지 궁금 해서요. SQL Injection을 막는 것이 문서에서 발견했습니다. doc [here] (http://symfony.com/doc/current/book/doctrine.html#querying-for-objects-with-dql) – NewRehtse