ऐरे पैरामीटर्स को पास करना और पीडीओ के साथ LIMIT क्लॉज का उपयोग करना
डेटाबेस प्रश्नों के साथ काम करते समय, पैरामीटर्स की एक सरणी को पास करना फायदेमंद हो सकता है LIMIT क्लॉज का उपयोग करते समय एक PDO स्टेटमेंट। हालाँकि, अलग-अलग मापदंडों को सेट करने के लिए बाइंडपार्म विधि का उपयोग करते समय यह चुनौतीपूर्ण हो सकता है। , जबकि निष्पादन विधि नामित मापदंडों की एक सरणी की अपेक्षा करती है। यह असंगति दोनों दृष्टिकोणों को एक साथ उपयोग करने से रोकती है।
समस्या पर काबू पाना
समाधान PDO::ATTR_EMULATE_PREPARES की डिफ़ॉल्ट सेटिंग को अक्षम करने में निहित है। सक्षम होने पर, पीडीओ आंतरिक रूप से गतिशील एसक्यूएल उत्पन्न करता है और मूल्यों को उद्धृत करता है, अनिवार्य रूप से तैयार कथनों का अनुकरण करता है। हालाँकि, यह डिफ़ॉल्ट व्यवहार नामित मापदंडों को पारित करने में हस्तक्षेप करता है। . यह पीडीओ को वास्तविक तैयार किए गए कथनों का उपयोग करने की अनुमति देता है, जिससे LIMIT क्लॉज का उपयोग करते हुए नामित मापदंडों को बांधना संभव हो जाता है।
उदाहरण उपयोग
$pdo->setAttribute (PDO::ATTR_EMULATE_PREPARES, गलत); $sql = "चयन करें * तालिका से जहां आईडी CONCAT की तरह है ('%', :id, '%') LIMIT :limit1, :limit2"; $stmt = $pdo->तैयार करें($sql); $stmt->execute(array(':id' => $id, ':limit1' => $limit1, ':limit2' => $limit2)); // कार्य!प्रदर्शन संबंधी विचार
प्रदर्शन को बढ़ाने के लिए MySQL के लिए डिफ़ॉल्ट रूप से अनुकरणीय तैयारी का उपयोग किया जाता है। अनुकरणीय तैयारी को अक्षम करने से प्रदर्शन थोड़ा कम हो सकता है, लेकिन यह पैरामीटर बाइंडिंग में अधिक लचीलेपन को सक्षम बनाता है।अतिरिक्त संसाधन
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$sql = "SELECT * FROM table WHERE id LIKE CONCAT('%', :id, '%') LIMIT :limit1, :limit2";
$stmt = $pdo->prepare($sql);
$stmt->execute(array(':id' => $id, ':limit1' => $limit1, ':limit2' => $limit2)); // Works!
[PDO MySQL: PDO::ATTR_EMULATE_PREPARES का उपयोग करें या नहीं?](https://stackoverflow.com/questions/3273325/pdo-mysql-use-pdo-attr-emulator-prepares-or -नहीं)
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3