Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

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

यह रही समस्या:

$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);
    


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. सप्ताहांत को छोड़कर, दो तिथियों के बीच दिनों की गणना करें (केवल MySQL)

  2. एक SQL क्वेरी के साथ एकाधिक गणना कैसे प्राप्त करें?

  3. डेटाटाइम कॉलम से तारीख कैसे चुनें?

  4. एसक्यूएल क्वेरी निकटतम तारीख दिखाने के लिए?

  5. एक एकल MySQL तैयार कथन w/PHP और PDO में एक सरणी कैसे सम्मिलित करें?