PHP का उपयोग करते समय MySQL बनाम MySQLi [बंद]


167

कौन सा बेहतर है, MySQL या MySQLi? और क्यों? मुझे कौन सा उपयोग करना चाहिए?

मेरा मतलब सिर्फ प्रदर्शन के मामले में नहीं है, बल्कि किसी अन्य प्रासंगिक विशेषता से है।

जवाबों:


111

यदि आपके पास MySQL इम्प्रूव्ड एक्सटेंशन ओवरव्यू पर एक नज़र है , तो यह आपको दोनों के बीच के अंतरों के बारे में जानने के लिए आवश्यक सब कुछ बता देगा।

मुख्य उपयोगी विशेषताएं हैं:

  • ऑब्जेक्ट-ओरिएंटेड इंटरफ़ेस
  • तैयार बयानों के लिए समर्थन
  • कई बयानों के लिए समर्थन
  • लेनदेन के लिए समर्थन
  • डिबगिंग क्षमताओं को बढ़ाया
  • एम्बेडेड सर्वर समर्थन।

1
हाँ, सबसे अच्छी बात यह है कि mysqli तैयार कथनों का समर्थन करता है
jondinham

7
यह भी ध्यान दिया जाना चाहिए कि MySQLi केवल MySQL 5+ के साथ काम करता है। यह अब वास्तव में प्रासंगिक नहीं है, लेकिन जब MySQLi बाहर आया, तो MySQL 4 अभी भी मानक था। यह एक्सटेंशन अलग-अलग होने के कारण है, पुराने MySQL ड्राइवर संगतता उद्देश्यों के लिए वहां रहते हैं।
zneak

6
यह ध्यान देने योग्य है कि छह वर्षों में चीजें बहुत बदल गई हैं। mysql_*()अब हटा दिया गया है और जल्द ही हटा दिया जाएगा। आपको इसका उपयोग नए कोड के लिए नहीं करना चाहिए।

हमें कम सीपीयू और रैम के साथ किसे चुनना चाहिए?
महदी जाजिनी

1
नीचे गॉर्डन का जवाब देखें। पुराना mysql एक्सटेंशन अब समर्थित नहीं है इसलिए आप वैसे भी mysqli एक्सटेंशन का उपयोग करने से बेहतर होंगे।
मार्क डेविडसन

70

एक मैनुअल पेज है जो mysql, mysqli और PDO के बीच चुनने में मदद करने के लिए समर्पित है

PHP टीम नए विकास के लिए mysqli या PDO_MySQL की सिफारिश करती है:

यह mysqli या PDO_MySQL एक्सटेंशन का उपयोग करने के लिए अनुशंसित है। नए विकास के लिए पुराने mysql एक्सटेंशन का उपयोग करने की अनुशंसा नहीं की गई है। एक विस्तृत सुविधा तुलना मैट्रिक्स नीचे प्रदान की गई है। तीनों एक्सटेंशनों के समग्र प्रदर्शन को एक ही माना जाता है। हालांकि एक्सटेंशन का प्रदर्शन PHP वेब रिक्वेस्ट के कुल रन टाइम के कुछ अंश का ही योगदान देता है। अक्सर, प्रभाव 0.1% जितना कम होता है।

पेज में एक्सटेंशन एपीआई की तुलना करने वाला एक फीचर मैट्रिक्स भी है। Mysqli और mysql एपीआई के बीच मुख्य अंतर इस प्रकार हैं:

                               mysqli     mysql
Development Status             Active     Maintenance only
Lifecycle                      Active     Long Term Deprecation Announced*
Recommended                    Yes        No
OOP API                        Yes        No
Asynchronous Queries           Yes        No
Server-Side Prep. Statements   Yes        No
Stored Procedures              Yes        No
Multiple Statements            Yes        No
Transactions                   Yes        No
MySQL 5.1+ functionality       Yes        No

* http://news.php.net/php.internals/53799

पुस्तकालयों (नए mysqlnd बनाम libmysql) की तुलना में एक अतिरिक्त फीचर मैट्रिक्स है

और एक बहुत अच्छी तरह से ब्लॉग पर लेख


15

मैंने mysqli का उपयोग करना छोड़ दिया है। यह बस बहुत अस्थिर है। मेरे पास क्वेरीज़ हैं जो PHP को mysqli का उपयोग करके क्रैश करते हैं लेकिन mysql पैकेज के साथ ठीक काम करते हैं। इसके अलावा mysqli LONGTEXT कॉलम पर क्रैश होता है । यह बग कम से कम 2005 से विभिन्न रूपों में उठाया गया है और टूटा हुआ है । मैं ईमानदारी से तैयार कथनों का उपयोग करना चाहता हूं, लेकिन mysqli अभी पर्याप्त विश्वसनीय नहीं है (और कोई भी इसे ठीक करने के लिए परेशान नहीं करता है)। यदि आप वास्तव में तैयार बयानों को पीडीओ के साथ जाना चाहते हैं।


2
पीडीओ बिलकुल भी सही नहीं है (मैं इसके साथ कुछ नॉस्टेड कोरपंपों में चला गया हूं), लेकिन कम से कम इसमें एक व्यापक उपयोगकर्ताबेस है, इसलिए यह संभवतः एक सुरक्षित दांव है।
troelskn

@troelskn, तो सामान्य mysql सिर्फ बेहतर नहीं है?
15

@Pacerier को देखते हुए कि यह पदावनत है, मैं नहीं कहूंगा। सामान्य तौर पर, ऐसा लगता है कि पीडीओ मानक विकल्प बन गया है।
ट्रोलेक्सेन

@troelskn, लेकिन पदावनत का कोई मतलब नहीं है सिवाय इसके कि यह भविष्य के संस्करणों में नहीं होगा। स्थिरता के संदर्भ में, सामान्य mysql अधिक स्थिर नहीं है?
पचेरियर

1
इस बिंदु पर (5.5) PHP सक्रिय रूप से चेतावनी जारी करेगा यदि आप इसका उपयोग करते हैं: php.net/manual/en/migration55.depcated.php
troelskn

13

MySQLi का अर्थ है MySQL में सुधार। यह MySQL बाइंडिंग के लिए एक ऑब्जेक्ट-ओरिएंटेड इंटरफ़ेस है जो चीजों को उपयोग करना आसान बनाता है। यह तैयार किए गए कथनों (जो बहुत उपयोगी हैं) के लिए समर्थन भी प्रदान करता है । यदि आप PHP 5 पर हैं तो MySQLi का उपयोग करें।


5

क्या बेहतर है पीडीओ; यह एक कम crufty इंटरफ़ेस है और MySQLi जैसी सुविधाएँ भी प्रदान करता है।

तैयार बयानों का उपयोग करना अच्छा है क्योंकि यह एसक्यूएल इंजेक्शन संभावनाओं को समाप्त करता है; सर्वर-साइड तैयार स्टेटमेंट का उपयोग करना बुरा है क्योंकि यह राउंड-ट्रिप की संख्या को बढ़ाता है।


3

मेरे लिए, तैयार किए गए बयानों में एक विशेषता होनी चाहिए। अधिक सटीक, पैरामीटर बाइंडिंग (जो केवल तैयार बयानों पर काम करता है)। यह एसक्यूएल कमांड में तार डालने का एकमात्र वास्तविक तरीका है। मुझे वास्तव में 'भागने' के कार्यों पर भरोसा नहीं है। DB कनेक्शन एक बाइनरी प्रोटोकॉल है, मापदंडों के लिए ASCII- सीमित उप-प्रोटोकॉल का उपयोग क्यों करें?


1
पीडीओ आमतौर पर क्लाइंट-साइड तैयार स्टेटमेंट का उपयोग करता है, इसलिए वे वास्तव में सर्वर पर तैयार नहीं होते हैं - लेकिन यह अच्छा है, क्योंकि यह सर्वर संसाधनों को बचाता है और आमतौर पर बेहतर प्रदर्शन करता है। तैयार कथन "अनुकरण" हमेशा चीजों को सही ढंग से बच जाएगा।
मार्क

1
"हमेशा" और "बचना" खतरनाक शब्द हैं जब एक साथ जाते हैं। मुझे नहीं पता, शायद यह कोड पूरी तरह से बग-मुक्त है; लेकिन क्यों परेशान, जब एक असली बाइनरी प्रोटोकॉल उपलब्ध है? प्रदर्शन के लिए, यह बेंचमार्किंग के लिए खुला है।
जेवियर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.