दिलचस्प पोस्ट
चयन के साथ सम्मिलित करें एक सदिश में स्ट्रिंग :: स्ट्रिंग को विभाजित करने का सही तरीका <string> Node.js – एकाधिक async कॉल की प्रतीक्षा करें लापता शैलियों क्या इस लेआउट के लिए सही विषय चुना गया है? UITableView पंक्ति एनीमेशन अवधि और पूरा कॉलबैक फ़ाइल अपलोड के दौरान जावास्क्रिप्ट का उपयोग करके छवि आयाम प्राप्त करें जावा में एक निर्देशिका से फ़ाइलों को कैसे खींचें और छोड़ें मैं ईमेल में स्ट्रिंग को कैसे प्रारूपित कर सकता हूं ताकि आउटलुक लाइन ब्रेक प्रिंट करेगा? क्या cout सिंक्रनाइज़ / धागा-सुरक्षित है? एक स्थिर std :: नक्शा <int, int> सी ++ में शुरू कर रहा है क्या मुख्य () वास्तव में सी ++ प्रोग्राम शुरू होता है? JSF 2: कैसे एक ही इनपुट में अलग एजेक्स स्थिति दिखती है? दिखा रहा है कि कौन से फ़ाइलें दो संशोधनों के बीच बदल गई हैं SQLite डेटाबेस निष्पादन योग्य जार में कैसे शामिल है? स्प्रिंगएमवीसी में @ रिस्पॉन्सबॉडी का उपयोग करते हुए जेसनओबजेक्ट लौट रहा है

तैयार कथन के साथ MySQL पर LIMIT कीवर्ड

SELECT id, content, date FROM comment WHERE post = ? ORDER BY date DESC LIMIT ?, ? 

पीडीओ के साथ (मैं एमएएमपी 2.0.5 का इस्तेमाल कर रहा हूं जो कि अपाचे 2.2.21, PHP से 5.3.6 तक और MySQL 5.5.9) तैयार बयान है, यह काम नहीं करता है, अगर मैं क्वेरी को बदलता हूं

 LIMIT 0, 10 

यह काम करता हैं।

मैं MySQL की बग में देखता हूं कि यह पिछले संस्करण में एक बग था, लेकिन मुझे समझ नहीं आ रहा है कि यह अभी भी तय है।

अगर यह अभी भी एक समस्या है, तो क्या एक अन्य पंक्ति में पंक्तियों की श्रेणी का चयन करने का एक तरीका है?

कोड:

 $comments = $db->prepare($query); /* where $db is the PDO object */ $comments->execute(array($post, $min, $max)); 

Solutions Collecting From Web of "तैयार कथन के साथ MySQL पर LIMIT कीवर्ड"

यहाँ समस्या है:

 $comments = $db->prepare($query); /* where $db is the PDO object */ $comments->execute(array($post, $min, $max)); 

PDOStatement :: manual () का मैन्युअल पृष्ठ (जोर मेरा कहना है):

पैरामीटर

input_parameters एसक्यूएल कथन में बाध्य पैरामीटर निष्पादित होने के रूप में कई तत्वों के साथ एक सरणी हैं। सभी मानों को पीडीओ :: पैरामा_स्ट के रूप में माना जाता है

इस प्रकार आपके मापदंडों को तार के रूप में डाला जा रहा है, इसलिए अंतिम एसक्यूएल कोड इस तरह दिखता है:

 LIMIT '0', '10' 

यह एक ऐसा विशिष्ट मामला है जहां MySQL नंबर पर नहीं डाला जाएगा, लेकिन पार्स त्रुटि को ट्रिगर करेगा:

 mysql> SELECT 1 LIMIT 0, 10; +---+ | 1 | +---+ | 1 | +---+ 1 row in set (0.00 sec) mysql> SELECT 1 LIMIT '0', '10'; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''0', '10'' at line 1 

क्या दस्तावेज़ों को कहना है:

SELECT कथन द्वारा लौटायी जाने वाली पंक्तियों की संख्या को सीमित करने के लिए LIMIT धारा का उपयोग किया जा सकता है। LIMIT एक या दो संख्यात्मक तर्क लेता है, जो इन अपवादों के साथ, दोनों ही गैर-पूर्णांक पूर्णांक स्थिर होनी चाहिए:

  • तैयार बयानों के भीतर, LIMIT पैरामीटर का उपयोग करके निर्दिष्ट किया जा सकता है? प्लेसहोल्डर मार्कर

  • संग्रहीत कार्यक्रमों के भीतर, LIMIT मापदंडों को पूर्णांक-मूल्ययुक्त सामान्य पैरामीटर या स्थानीय चर का उपयोग करके निर्दिष्ट किया जा सकता है।

आपकी पसंद में शामिल हैं:

  • बाधाओं को एक-एक करके बाँटें ताकि आप एक प्रकार सेट कर सकें:

     $comments->bindParam(1, $post, PDO::PARAM_STR); $comments->bindParam(2, $min, PDO::PARAM_INT); $comments->bindParam(3, $min, PDO::PARAM_INT); 
  • पैरामीटर के रूप में उन मानों को न लगाएं:

     $query = sprintf('SELECT id, content, date FROM comment WHERE post = ? ORDER BY date DESC LIMIT %d, %d', $min, $max); 
  • एमुलेटेड को अक्षम करें (MySQL चालक में एक बग / सुविधा है जो इसे संख्यात्मक तर्कों का उद्धरण देगा):

     $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE); 
 $dbh->setAttribute( PDO::ATTR_EMULATE_PREPARES, false ); 

इस समस्या को हल करेंगे