2013-07-18 6 views
6

मैं symfony2 साथ doctrine2 उपयोग कर रहा हूँ और मैं एक साधारण चयन क्वेरी प्रदर्शन करने के लिए कोशिश कर रहा हूँ:Doctrine2 [विन्यास त्रुटि] त्रुटि: शाब्दिक उम्मीद, मिल गया '-'

मैं चलाना चाहते हैं:

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

चाल करना चाहिए:

$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

संबंधित मुद्दे