2011-11-28 13 views
7

पीडीओ की समझ जो अब तक हुई है वह यह है कि पीडीओ वास्तविक तैयार बयान का उपयोग करेगा जहां यह कर सकता है, और जहां उन्हें यह नहीं मिल सकता है। मैं यह भी समझ गया कि जहां MySQL का संबंध था, वास्तविक तैयार कथन का उपयोग किया जाएगा बशर्ते आप mysql के एक संस्करण के साथ संचार कर रहे हों जो उन्हें समर्थित करता था।पीडीओ, माइस्क्ल और देशी तैयार बयान

वास्तव में MySQL पीडीओ चालक के लिए PHP मैनुअल पृष्ठ उतना ही कहता है। http://php.net/manual/en/ref.pdo-mysql.php

हालांकि, एक और एसओ सवाल पर मैं How to replace all occurencies of char with elements from array? पर मदद कर रहा था, किसी ने टिप्पणी की कि यह सच नहीं है, और वास्तव में पीडीओ एक MySQL डेटाबेस से बात करते समय तैयार वक्तव्यों को अनुकरण करता है।

मैं सबूत वहाँ किए गए दावों वापस करने के लिए खोजने के लिए बहुत किस्मत नहीं मिला है, लेकिन मैं की खोज की थी है कि वहाँ एक पीडीओ :: ATTR_EMULATE_PREPARES विशेषता है कि तैयार बयान अनुकरण टॉगल करने के लिए विन्यस्त किया जा सकता।

तो इस मामले की सच्चाई क्या है? क्या पीडीओ वास्तव में mysql के साथ तैयार कथन का उपयोग नहीं करता है? यदि नहीं, तो इसे ऐसा करने के लिए मजबूर किया जा सकता है, और यदि हां, तो क्या आपको ऐसा करना चाहिए? मैंने हमेशा यह माना है कि चूंकि mysql में वास्तविक तैयार बयान हैं कि पीडीओ मैनुअल में दावा के अनुसार उनका उपयोग करेगा। क्या मैनुअल गलत है?

जोड़ने के लिए संपादित करें: मैंने हाल ही में कुछ लेख पढ़े हैं कि कम से कम एक वास्तविक तर्क दें कि क्यों वास्तविक तैयार प्रश्न डिफ़ॉल्ट रूप से अक्षम किए जाते हैं। PHP स्क्रिप्ट कम रहती हैं और केवल अनुरोध के जवाब उत्पन्न करने के लिए पर्याप्त समय तक चलती हैं, जिसके बाद उनके सभी संसाधनों को हटा दिया जाता है। किसी भी प्रश्न के लिए आप प्रति अनुरोध केवल एक बार निष्पादित करते हैं, आपको वास्तव में 2 एसक्यूएल कमांड (तैयार कमांड और निष्पादन कमांड) निष्पादित करना होगा ताकि किसी भी तैयार कथन के लिए केवल एक बार निष्पादित किया जा सके जब आप वास्तव में नकल के मुकाबले थोड़ा खराब प्रदर्शन करेंगे तैयार बयान। लूप में चलने वाले प्रश्नों के लिए वास्तविक तैयार कथन शायद बेहतर प्रदर्शन करेंगे, लेकिन ऐसे मामले आमतौर पर अनुरोध/प्रतिक्रिया मॉडल PHP के अपेक्षाकृत दुर्लभ होते हैं।

मुझे अभी भी लगता है कि वास्तविक तैयार कथन बेहतर हैं लेकिन कम से कम मेरे पास उचित स्पष्टीकरण है कि क्यों पीडीओ डिफ़ॉल्ट रूप से नकली क्वेरी का उपयोग करता है।

उत्तर

5

क्या पीडीओ वास्तव में mysql के साथ तैयार कथन का उपयोग नहीं करता है?

हाँ, डिफ़ॉल्ट रूप से (कम से कम संस्करण के साथ मैं परीक्षण किया है), लेकिन देशी मोड मैन्युअल रूप से चालू किया जा सकता है।

यदि नहीं, तो ऐसा करना

PDO::ATTR_EMULATE_PREPARES सेटिंग को रोजगार से मजबूर किया जा सकता है, नाम सुंदर आत्म व्याख्यात्मक है।

$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

आपको लगता है कि क्या करना चाहिए?

यह उन सभी का सबसे कठिन सवाल है।
ठीक है, मैं कहूंगा - हाँ, आपको चाहिए। यदि आप पीडीओ को अपने डीबी ड्राइवर के रूप में चुनते हैं, तो इम्यूलेशन मोड में इसका उपयोग करने में कोई बात नहीं है।

+0

उत्तर के लिए धन्यवाद। यह प्रश्न पूछता है, हालांकि, अगर यह इसका समर्थन करता है तो यह डिफ़ॉल्ट रूप से क्यों बंद हो जाता है? – GordonM

+0

यह संगतता मुद्दा है, मुझे विश्वास है। –

संबंधित मुद्दे