उल्लेख करने के लिए एक छोटी सी बात है। डिफ़ॉल्ट रूप से, पीडीओ बस अनुकरण करें तैयार बयान।
और इम्यूलेशन मोड में रहते हुए, यह वास्तव में एक भी बयान तैयार किए बिना वही पुरानी क्वेरी चलाता है :)
तो, सबसे पहले,
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
वास्तविक तैयार बयानों को चालू करने के लिए।
उल्लेख करने के लिए एक और छोटी बात है।
दुर्भाग्य से, बहुत कम हैं वास्तविक दुनिया में ज्ञान। और विशेष रूप से प्रश्नोत्तर साइटों की दुनिया में। लोग उन सूचनाओं को दोहराते हैं जिन्हें उन्होंने पढ़ा और उचित पाया। सबूत के लिए कोई परीक्षण चलाए बिना या यहां तक कि अपना हाथ रखे बिना भी। इसलिए, "अक्सर नोट किया गया" को एक विश्वसनीय स्रोत के रूप में बिल्कुल भी नहीं माना जाना चाहिए।
मामले पर वापस:हालांकि कुछ दंड होना चाहिए, यह ज्यादातर समय महत्वहीन होना चाहिए। अगर ऐसा है - आपको अपने सिस्टम को ट्यून करना होगा।
वैसे भी, इम्यूलेशन मोड में आपको यह "तेज़" और सुरक्षित दोनों मिला।
अपडेट करें
खैर, मेरे डेटा पर आपके परीक्षण चलाने के बाद, मुझे यह कहना होगा कि यदि आपके पास बड़े डेटासेट पर 3 गुना अंतर है तो आपके डेटाबेस में कुछ गड़बड़ है।
बिजली की क्वेरी के लिए
select title from Board where id = 1
परिणाम हैं
emulation on off
query 0.07 0.130
prepare 0.075 0.145
जबकि काफी बोझिल सवाल के लिए
select title from Board where id > 1
परिणाम हैं
emulation on off
query 0.96 0.96
prepare 0.96 1.00
इसलिए, जैसा कि हम देख सकते हैं, बड़े डेटासेट पर अंतर नज़र नहीं आता।
लाइटनिंग क्वेरी के लिए कुछ अंतर है, लेकिन, क्योंकि यह सेकंड का केवल 0,0003वां गुट लेता है (एक प्रश्न के लिए) - मैं कहूंगा कि यह "उदासीनता" शब्द के लिए एक आदर्श उदाहरण है।
क्वेरी ()/तैयार () के बीच समान परिणामों के लिए - मेरे पास केवल एक ही विचार है - पीडीओ सभी प्रश्नों के लिए तैयार/निष्पादित करता है, यहां तक कि बिना बाइंडिंग के भी।
अब एन्कोडिंग समस्या पर आते हैं।
हां, अजीब जीबीके समस्या 5.3.3 से पहले के संस्करणों के लिए पीडीओ को प्रभावित करती है। इन संस्करणों में उचित एन्कोडिंग सेट करने का कोई तरीका नहीं था और अपरिहार्य कमजोर (इम्यूलेशन मोड में) थे। लेकिन चूंकि 5.3.3 पीडीओ डीएसएन में एन्कोडिंग सेटिंग का समर्थन करता है, और अब इसके साथ सब कुछ ठीक है।
mysqli के लिए किसी को mysqli_set_charset()
का उपयोग करना होगा। इसी उद्देश्य के लिए एक ही (अभेद्य) परिणाम के साथ।
मेरी अपनी कक्षा में जो mysqli पर आधारित है, मैं अपने स्वयं के प्लेसहोल्डर कार्यान्वयन का उपयोग कर रहा हूं और बिना किसी तैयार कथन का उपयोग करता हूं। प्रदर्शन कारणों से नहीं बल्कि बेहतर विश्वसनीयता के लिए।