2012-04-13 20 views
21

कुछ नया सीखने की कोशिश कर रहा है - विशेष रूप से MySQLi या PDO का उपयोग करने के लिए गीलेर का चयन करने की कोशिश कर रहा है, जब MySQL - I के साथ काम करते समय भविष्य में परियोजनाओं के लिए this page पर ठोकर खाई गई जो मेरे लिए उपलब्ध विकल्पों का एक अवलोकन दिखाती है।क्लाइंट-साइड तैयार कथन क्या हैं?

इस पृष्ठ के निचले हिस्से में mysql के साथ संचार करने के तीन मुख्य तरीकों की कार्यक्षमता की तुलना में एक तालिका है। पंक्ति में "एपीआई ग्राहक-पक्ष तैयार राज्यों का समर्थन करता है", यह कहता है कि पीडीओ इसका समर्थन करता है और MySQLi नहीं करता है।

मुझे पता है कि तैयार कथन क्या हैं। this question का उत्तर मुझे लगता है कि सर्वर-साइड तैयार कथन का एक सरल उदाहरण है। और PHP एक सर्वर-साइड भाषा है, जिसका अर्थ यह हो सकता है कि इससे कोई फर्क नहीं पड़ता कि क्लाइंट-साइड तैयार कथन उपलब्ध हैं या नहीं। लेकिन इससे मुझे आश्चर्य होता है कि फिर भी PHP मैनुअल में क्यों सूचीबद्ध है।

तो क्लाइंट-साइड तैयार कथन क्या हैं?

+3

मुझे लगता है कि यह वेब मॉडल की तुलना में एक अलग संदर्भ में क्लाइंट/सर्वर का उपयोग करता है - यानी MySQL सर्वर है और PHP इस संदर्भ में क्लाइंट है। भले ही वे दोनों एक ही कंप्यूटर पर हों। –

+2

निश्चित रूप से यह ['पीडीओ :: ATTR_EMULATE_PREPARES'] (http://www.php.net/manual/en/pdo.setattribute.php) को संदर्भित करता है, एक सेटिंग जो इंटरपोलेशन और भागने के साथ तैयार बयानों को अनुकरण करती है। डीबी सर्वर में अनुरोधों को स्थानांतरित करने से पहले यह लाइब्रेरी में किया जाता है, इसलिए तकनीकी रूप से क्लाइंट-साइड। – mario

+0

@ मैटफ़ेनविक हालांकि यह सही समझ में आ सकता है, यह समझा नहीं जाता है कि क्यों एक ही तालिका सभी पुस्तकालयों के लिए सर्वर-साइड तैयार बयानों के लिए समर्थन दिखाती है, लेकिन उनमें से केवल एक क्लाइंट-साइड का समर्थन करता है अगर हम इस आधार को स्वीकार करते हैं कि PHP है ग्राहक। – Repox

उत्तर

28

जाहिर है, क्लाइंट-साइड तैयार कथन ऐसे बयान हैं जो क्लाइंट द्वारा सर्वर के बजाय तैयार किए जाते हैं।

पीडीओ एक डाटा-एक्सेस एब्स्ट्रक्शन लेयर है जो एकाधिक डीबीएमएस इंटरफेस (ड्राइवर) का समर्थन करता है, जिनमें से कुछ सर्वर-साइड तैयार कथन (उदाहरण: MySQL 4.1+) का समर्थन करते हैं, जिनमें से कुछ (उदाहरण: MySQL 3) ।

ऐसी स्थिति में जहां पीडीओ ड्राइवर सर्वर-साइड तैयार कथन का समर्थन नहीं करता है, पीडीओ क्लाइंट-साइड पर अनुकरण करेगा और उन्हें निष्पादित करने के लिए जेनेरिक क्वेरी इंटरफ़ेस का उपयोग करेगा।

MySQLi उनका समर्थन नहीं करने का कारण सरल है: MySQLi एक MySQL- विशिष्ट एक्सटेंशन है, एक आरडीबीएमएस जो वास्तव में सर्वर-पक्ष तैयार कथन का समर्थन करता है, इसलिए उन्हें अनुकरण करने का कोई कारण नहीं है।

13

टिप्पणियों में कहा गया था, इस मामले में "क्लाइंट" PHP और "सर्वर" को MySQL से संदर्भित करता है। पीडीओ MySQL के अलावा डेटाबेस का समर्थन करता है। इन सभी डेटाबेस/डीबी ड्राइवर तैयार रूप से तैयार बयान का समर्थन नहीं करते हैं, और उन मामलों में पीडीओ इन बयानों का अनुकरण करेगा। MySQLi नहीं होगा (मुझे यकीन नहीं है कि इसे कब करना होगा - शायद जब यह पुराने MySQL ड्राइवर से निपट रहा हो?)।

एक और कारक जिसे आप विचार करना चाहते हैं - कुछ PHP ढांचे को पीडीओ की आवश्यकता होती है और mysqli का समर्थन नहीं करते हैं।

2

पीडीओ के साथ, आप तैयार कथन (कोड में) का उपयोग कर सकते हैं कि क्या आप पीडीओ से कनेक्ट कर रहे डेटाबेस का समर्थन करते हैं या नहीं।

यदि सर्वर तैयार कथन संभालता है, तो पीडीओ सर्वर को उन्हें (सर्वर पक्ष) को संभालने देगा। यदि नहीं, तो पीडीओ बस पीडीओ (क्लाइंट साइड) के भीतर तैयार बयानों को अनुकरण करता है, लेकिन प्रत्येक क्वेरी को सर्वर पर भेजने के लिए समाप्त होता है।

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