2013-07-18 16 views
6

Ben Symfony2'de ile doctrine2 kullanıyorum ve basit bir seçme sorgusu gerçekleştirmek çalışıyorum:Doctrine2 [Dizimi Hatası] Hata: Değişmez Beklenen aldık '-'

Ben çalıştırmak istiyorum:

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

Bu PHP kodu:

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

şu istisna verir

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

Ben in argüman içinde sadece pozitif sayılar kullanırsanız, çalışır:

Bu varlık içinde nitelik tanımıdır. İstisna sadece negatif sayılarla olur.

Bu özel duruma neden olan nedir?

+0

Çizgiler izin verilmez. Ya çizgiden kurtulun ya da negatif sayıyı bir parametreye ayırın. –

cevap

12

hile yapmak olmalı: onlar SQL injection saldırısının parçası olabileceğinden

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

Neden bir parametre ayarlamanız gerektiğini merak ettim ve belgelerin içinde SQL Enjeksiyonlarını önlemek olduğunu öğrendim. Dokümanı burada bulabilirsiniz (http://symfony.com/doc/current/book/doctrine.html#querying-for-objects-with-dql) – NewRehtse

İlgili konular