दिलचस्प पोस्ट
जावा में प्रिंट करने योग्य चार PDO :: fetchAll बनाम PDO :: एक लूप में ले आओ आईओएस 4: इन-हाउस अनुप्रयोगों के लिए वायरलेस एप वितरण ऑडियो रिकॉर्ड करें और IOS में स्थायी रूप से सहेजें गो में अभिप्राय का प्रतिनिधित्व करने का एक मुहावरेदार तरीका क्या है? एंड्रॉइड में आउटगोइंग कॉल का जवाब मिलने पर पता लगाया नहीं जा सकता एंड्रॉइड के साथ एमुलेटर को घुमाने के लिए असंभव 4.4 Rstudio कमांड लाइन में कमांडों का अनुकरण कर रहा है संदर्भ: mod_rewrite, URL पुनर्लेखन और "सुंदर लिंक" समझाया लिनक्स पर बड़ी प्रक्रियाओं का तेज भड़कना? नोड.जेएस वर्तमान व्याप्ति के बाहर कैसे एक चर निर्धारित करें टीसीपी: क्या दो अलग-अलग सॉकेट बंदरगाह साझा कर सकते हैं? PHP को महीने के लिए सप्ताह की संख्या मिलती है ggplot: पहल लेबल बदलने के लिए कैसे? प्रतिबिंब का उपयोग करते हुए पैराम्स का मूल्य प्राप्त करना

PHP के mysql_ फ़ंक्शंस नापसंद क्यों हैं?

शैतान की भूमिका निभाने के लिए यहां थोड़ी देर के रूप में मैंने कुछ समय पहले इन कार्यों का उपयोग करना बंद कर दिया था, लेकिन यह प्रश्न वास्तविक और संभवतः SO उपयोगकर्ताओं के लिए मायने रखता है।

हम सभी जानते हैं कि गलत तरीके से mysql_ फ़ंक्शंस का प्रयोग बहुत खतरनाक हो सकता है, यह आपकी वेबसाइट पर असुरक्षित इत्यादि को छोड़ सकता है। लेकिन सही तरीके से उपयोग किए जाने पर इन कार्यों को एसक्यूएल इंजेक्शन से बचाया जा सकता है और वास्तव में नए पीडीओ कार्यों से अपेक्षाकृत थोड़ा तेज है।

इस सब को ध्यान में रखते हुए, mysql_ फ़ंक्शन को क्यों नापसंद किया गया है?

Solutions Collecting From Web of "PHP के mysql_ फ़ंक्शंस नापसंद क्यों हैं?"

MySQL विस्तार प्राचीन है और लगभग 15 साल पहले जारी किए गए PHP 2.0 के बाद से (!!); जो आधुनिक पीएचपी से एक निश्चित जानवर है जो कि अपने अतीत के बुरे व्यवहारों को बहाल करने की कोशिश करता है। MySQL एक्सटेंशन एक बहुत ही कच्चा, निम्न स्तरीय कनेक्टर है जो कि कई सुविधा सुविधाओं का अभाव है और एक सुरक्षित फैशन में सही तरीके से लागू करने के लिए कठिन है; इसलिए नॉनों के लिए यह बहुत बुरा है कई डेवलपर्स एसक्यूएल इंजेक्शन नहीं समझते हैं और mysql एपीआई काफी कमजोर है जिससे इसे रोकने में मुश्किल हो सकती है, भले ही आप इसकी जानकारी रखते हों। यह वैश्विक राज्य से भरा (उदाहरण के लिए अंतर्निहित कनेक्शन), जो इसे कोड लिखना आसान बनाता है जो कि बनाए रखने में कठिनाई होती है चूंकि यह पुराना है, यह PHP कोर स्तर पर बनाए रखने के लिए अनुचित रूप से कठिन हो सकता है।

Mysqli एक्सटेंशन बहुत नया है और ऊपर की सभी समस्याओं को हल करता है पीडीओ भी नया नहीं है और ये सभी समस्याओं को भी ठीक करता है, प्लस अधिक।

इन कारणों के कारण * भविष्य में माइस्क्ल एक्स्टेंशन को कभी-कभी हटा दिया जाएगा। यह अपने उत्थान में अपनी नौकरी, बल्कि बुरी तरह से किया था, लेकिन यह किया था। समय आगे बढ़ गया है, सर्वोत्तम प्रथाओं का विकास हुआ है, अनुप्रयोगों को और अधिक जटिल मिल गया है और अधिक आधुनिक API की आवश्यकता है mysql सेवानिवृत्त किया जा रहा है, इसके साथ रहें।

यह सब देखते हुए जड़ता को छोड़कर इसका उपयोग करने का कोई कारण नहीं है


* ये मेरे सामान्य ज्ञान सारांश कारण हैं; पूरी आधिकारिक कहानी के लिए, यहां देखें: https://wiki.php.net/rfc/mysql_deprecation

उस दस्तावेज़ से विकल्प का उद्धरण निम्नानुसार है:

प्रलेखन दल डेटाबेस सुरक्षा स्थिति पर चर्चा कर रहा है, और उपयोगकर्ताओं को सामान्यतः उपयोग किए जाने वाले ext / mysql एक्सटेंशन से दूर जाने के लिए शिक्षित करना इस का एक हिस्सा है।

Ext / mysql से दूर चलना केवल सुरक्षा के बारे में ही नहीं है बल्कि यह भी कि MySQL डाटाबेस की सभी विशेषताओं का उपयोग करने के बारे में है।

ext / mysql कोड को बनाए रखने के लिए मुश्किल है। यह नई सुविधाएं नहीं मिल रही है इसे अप टू डेट रखने के लिए libmysql या mysqlnd संस्करण के नए संस्करणों के साथ काम करने का काम है, हम शायद उस समय बेहतर खर्च कर सकते हैं

वे क्यों नापसंद कर रहे हैं?

खैर, मौलिक कारण यह है कि एपीआई खराब डिजाइन किया गया था। बेहतर एपीआई डिजाइन के साथ, mysqli पुस्तकालय इसके लिए एक सीधा प्रतिस्थापन के रूप में बनाया गया था।

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

हालांकि, यह मामला नहीं था। मूल एपीआई में कुछ महत्वपूर्ण डिजाइन दोष थे, जिसका मतलब था कि जब PHP डेवलपर्स चीजों को सुधारना चाहते थे, तब समस्याएं थीं, जिसका अर्थ था कि वे ऐसा नहीं कर सकते थे।

इसलिए, उनके लिए सर्वोत्तम कार्यवाही करने का एक नया एपीआई प्रदान करना था और पुराने को छोड़ देना था।

प्रतिवाद

जहां तक ​​मुझे पता है, यह ओरेकल लोगों को समर्थन के लिए जिम्मेदार है, बस अब ऐसा करने से इनकार कर दिया। ऐसा लगता है कि मुख्य कारण है।

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

क्या इसका मतलब है कि मुझे उनसे मेरी साइट्स में उपयोग करना बंद कर देना चाहिए?

निर्भर करता है।

  • विरासत कोड के लिए, मुझे यह संदेह है कि आपातकालीन पुन: लिखने के लिए शुरू करना उचित होगा।
  • ब्रांड नई परियोजनाओं के लिए – जवाब काफी आसान है:

आपको एप्लिकेशन कोड में जो भी API कॉल का उपयोग नहीं करना चाहिए, लेकिन केवल डीबीएएल लाइब्रेरी में ही।

यह न केवल पूरे चालक की समस्या को नगण्य करेगा (जैसा कि आप ड्राइवरों को बदलने के लिए केवल एक अपेक्षाकृत छोटे पुस्तकालय कोड को दोबारा लिखना होगा) बल्कि यह आपके कोड को नाटकीय रूप से छोटा और क्लीनर बना सकता है

प्रदर्शन

प्रदर्शन अंतर की बात करते हुए, उल्लेख करने के लिए एक दिलचस्प बात है। इंटरनेट वास्तव में बेंचमार्क से भरा है जो आपको बता रही है कि एक्स वाई से ज़्यादा तेज़ समय से तेज़ है। लेकिन एक बुरा बेंचमार्क से कोई अच्छा बेंचमार्क कैसे बता सकता है? सामान्य तौर पर यह बताना मुश्किल है सामान्यतया, एक परीक्षा लिखते समय, उसे समझना होगा कि वे क्या कर रहे हैं। दुर्भाग्य से, अधिकांश परीक्षण-लेखक नहीं करते हैं।

आइए अपने प्रश्न से जुड़ा एक लेते हैं।

लूप में कनेक्शन कोड शामिल करके, लेखक केवल कनेक्शन का समय बेंचमार्क कर रहा है , लेकिन उसे मापने के उद्देश्य से नहीं। परिणाम काफी उम्मीद के मुताबिक हैं
इसलिये

  • कनेक्शन एक अपेक्षाकृत संसाधन-उपभोक्ता आपरेशन के रूप में जाना जाता है
  • mysql_connect() वास्तव में फिर से कनेक्ट नहीं होता (यदि स्पष्ट रूप से नहीं बताया गया है), लेकिन इसके बजाय पिछले खोले कनेक्शन का उपयोग करें।

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

कनेक्ट को फिर से चलने वाले कोड से हटा दिया गया, परिणाम नाटकीय रूप से बदल गया, कुल तुच्छ दिखाया गया।

इस परीक्षण में कई अन्य नुकसान हैं लेकिन यह विचार एक समान रहता है:

कहीं से भी बेकार मानक नहीं चलाएं। लेकिन हमेशा किसी भी मानक के लिए यदि आपके पास असली कारण है और असली वातावरण है अन्यथा आप कुछ भी मापन करेंगे, लेकिन जो भी अर्थपूर्ण संख्याएं

फ़ीचर तुलना

जैसा कि इसमें सुविधाओं का अभाव है, आजकल केवल अपेक्षा की जाती है, यह अब बनाए रखने के योग्य नहीं है जैसा कि PHP एक स्लिम API (…) रखने की कोशिश करता है, आप अपेक्षा कर सकते हैं कि इसे अंततः हटा दिया जाएगा यह आईई 7 की तरह है: YOu इसे "disapears" तक उपयोग करने की उम्मीद नहीं कर सकता आपको अपना उपयोग करना रोकना होगा

http://php.net/manual/en/mysqlinfo.api.choosing.php से चित्र