आपका पीडीओ तैयार प्रश्नों का अनुकरण करने के लिए कॉन्फ़िगर किया गया है, जबकि mysqli सही तैयार प्रश्नों का उपयोग कर रहा है।
तैयार क्वेरी स्ट्रिंग को बांधती है ''1''
एक पूर्णांक पैरामीटर मान के रूप में। PHP इसे intval()
. जैसी किसी चीज़ का उपयोग करके एक पूर्णांक के लिए बाध्य करती है . गैर-संख्यात्मक अग्रणी वर्णों वाली कोई भी स्ट्रिंग PHP द्वारा 0 के रूप में व्याख्या की जाती है, इसलिए पैरामीटर मान बाद भेजा जाता है तैयार मान 0 है।
नकली तैयार क्वेरी स्ट्रिंग इंटरपोलेशन . का उपयोग करती है (बाध्यकारी के बजाय) स्ट्रिंग जोड़ने के लिए ''1''
SQL क्वेरी में पहले MySQL इसे पार्स करता है। लेकिन परिणाम समान है, क्योंकि SQL एक पूर्णांक संदर्भ में गैर-संख्यात्मक अग्रणी वर्णों वाली स्ट्रिंग को मान 0 के रूप में भी मानता है।
केवल अंतर यह है कि सामान्य क्वेरी लॉग में क्या समाप्त होता है जब पैरामीटर तैयार करने से पहले बनाम तैयार होने के बाद बाध्य होता है।
आप पीडीओ को वास्तविक तैयार प्रश्नों का उपयोग करने के लिए भी कह सकते हैं, इसलिए इसे इस मामले में mysqli की तरह ही कार्य करना चाहिए:
$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
पुनश्च:यह एक अच्छा कारण प्रदर्शित कर सकता है कि क्यों id मान 0 के बजाय 1 पर प्रारंभ करने के लिए प्रथागत है।