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