यह रही समस्या:
$comments = $db->prepare($query);
/* where $db is the PDO object */
$comments->execute(array($post, $min, $max));
PDOStatement::execute() के लिए मैनुअल पेज कहते हैं (जोर मेरा):
<ब्लॉकक्वॉट>पैरामीटर
input_parameters
SQL कथन में निष्पादित किए जा रहे कई तत्वों के साथ मानों की एक सरणी है। सभी मानों को PDO::PARAM_STR के रूप में माना जाता है ।
इस प्रकार आपके पैरामीटर स्ट्रिंग के रूप में सम्मिलित हो रहे हैं, इसलिए अंतिम SQL कोड इस तरह दिखता है:
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
क्या दस्तावेज़ कहना होगा:
<ब्लॉकक्वॉट>
LIMIT
क्लॉज का उपयोग SELECT
. द्वारा दी गई पंक्तियों की संख्या को सीमित करने के लिए किया जा सकता है बयान। 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);