ऐसा क्यों हो रहा है?
संपूर्ण
ext/mysql
PHP एक्सटेंशन, जो उपसर्गmysql_
. के साथ नामित सभी फ़ंक्शन प्रदान करता है , को PHP v5.5.0 में आधिकारिक तौर पर हटा दिया गया था और PHP v7 में निकाला गया ।यह मूल रूप से MySQL v3.20 के लिए PHP v2.0 (नवंबर 1997) में पेश किया गया था, और 2006 से कोई नई सुविधाएँ नहीं जोड़ी गई हैं। नई सुविधाओं की कमी के साथ जटिल सुरक्षा कमजोरियों के बीच ऐसे पुराने कोड को बनाए रखने में कठिनाइयाँ हैं।पी>
मैनुअल में जून 2011 से नए कोड में इसके उपयोग के खिलाफ चेतावनियां शामिल हैं।
मैं इसे कैसे ठीक कर सकता हूं?
जैसा कि त्रुटि संदेश से पता चलता है, दो अन्य MySQL एक्सटेंशन हैं जिन पर आप विचार कर सकते हैं:MySQLiए> और PDO_MySQL , जिनमें से किसी एक का उपयोग
ext/mysql
. के स्थान पर किया जा सकता है . दोनों v5.0 के बाद से PHP कोर में हैं, इसलिए यदि आप ऐसे संस्करण का उपयोग कर रहे हैं जो इन बहिष्करण त्रुटियों को फेंक रहा है तो आप लगभग निश्चित रूप से तुरंत उनका उपयोग करना शुरू कर सकते हैं- यानी। बिना किसी इंस्टॉलेशन प्रयास के।वे थोड़े अलग हैं, लेकिन पुराने एक्सटेंशन पर कई लाभ प्रदान करते हैं, जिसमें लेनदेन, संग्रहीत प्रक्रियाओं और तैयार बयानों के लिए एपीआई समर्थन शामिल है (जिससे सबसे अच्छा तरीका SQL इंजेक्शन हमलों को हराने के लिए ) PHP डेवलपर उल्फ वेंडेल ने एक संपूर्ण तुलना लिखी है विशेषताएं ।
Hashphp.org के पास
ext/mysql
से माइग्रेट करने पर उत्कृष्ट ट्यूटोरियल है। पीडीओ को ।मैं समझता हूं कि
error_reporting
. सेट करके बहिष्करण त्रुटियों को दबाना संभव हैphp.ini
. मेंE_DEPRECATED
को बाहर करने के लिए :error_reporting = E_ALL ^ E_DEPRECATED
अगर मैं ऐसा करूँ तो क्या होगा?
हां, ऐसे त्रुटि संदेशों को दबाना और पुराने
ext/mysql
. का उपयोग जारी रखना संभव है फिलहाल के लिए विस्तार। लेकिन आपको वास्तव में ऐसा नहीं करना चाहिए —यह डेवलपर्स की ओर से एक अंतिम चेतावनी है कि एक्सटेंशन को PHP के भविष्य के संस्करणों के साथ बंडल नहीं किया जा सकता है (वास्तव में, जैसा कि पहले ही उल्लेख किया गया है, इसे PHP v7 से हटा दिया गया है)। इसके बजाय, आपको अपने आवेदन को अभी migrate माइग्रेट करने के लिए इस अवसर का लाभ उठाना चाहिए , इससे पहले कि बहुत देर हो जाए।यह भी ध्यान दें कि यह तकनीक सभी को दबा देगी
E_DEPRECATED
संदेश, न कि केवल वे जोext/mysql
. से संबंधित हैं एक्सटेंशन:इसलिए आप PHP में आने वाले अन्य परिवर्तनों से अनजान हो सकते हैं जो आपके एप्लिकेशन कोड को प्रभावित करेंगे। निश्चित रूप से, PHP के त्रुटि नियंत्रण ऑपरेटर -अर्थात। प्रासंगिक लाइन को@
. के साथ तैयार करना —हालाँकि यह सभी को दबा देगा उस अभिव्यक्ति द्वारा उठाई गई त्रुटियां, न कि केवलE_DEPRECATED
वाले।
आपको क्या करना चाहिए?
-
आप एक नया प्रोजेक्ट शुरू कर रहे हैं।
बिल्कुल कोई कारण नहीं है
ext/mysql
use का उपयोग करने के लिए —इसके बजाय दूसरे में से एक, अधिक आधुनिक, एक्सटेंशन चुनें और उनके द्वारा प्रदान किए जाने वाले लाभों का लाभ उठाएं। -
आपके पास (आपका अपना) लीगेसी कोडबेस है जो वर्तमान में
ext/mysql
. पर निर्भर करता है .प्रतिगमन परीक्षण करना बुद्धिमानी होगी:आपको वास्तव में कुछ भी नहीं बदलना चाहिए (विशेष रूप से PHP को अपग्रेड करना) जब तक आप प्रभाव के सभी संभावित क्षेत्रों की पहचान नहीं कर लेते, उनमें से प्रत्येक के आसपास योजना बनाई और फिर एक स्टेजिंग वातावरण में अपने समाधान का पूरी तरह से परीक्षण किया।
-
अच्छे कोडिंग अभ्यास के बाद, आपके एप्लिकेशन को शिथिल एकीकृत/मॉड्यूलर फैशन में विकसित किया गया था और डेटाबेस एक्सेस विधियां सभी एक ही स्थान पर स्व-निहित हैं जिन्हें आसानी से नए एक्सटेंशन में से किसी एक के लिए स्वैप किया जा सकता है।
दूसरे में से एक, अधिक आधुनिक, एक्सटेंशन का उपयोग करने के लिए इस मॉड्यूल को फिर से लिखने में आधा घंटा बिताएं; अच्छी तरह से परीक्षण करें। आप बाद में उनके द्वारा प्रदान किए जाने वाले लाभों का लाभ उठाने के लिए और परिशोधन शुरू कर सकते हैं।
-
डेटाबेस पहुंच विधियां हर जगह बिखरी हुई हैं और नए एक्सटेंशन में से किसी एक के लिए इसे आसानी से स्वैप नहीं किया जा सकता है।
विचार करें कि क्या आपको इस समय वास्तव में PHP v5.5 में अपग्रेड करने की आवश्यकता है।
आपको
ext/mysql
. को बदलने की योजना बनाना शुरू कर देना चाहिए दूसरे में से एक के साथ, अधिक आधुनिक, एक्सटेंशन ताकि आप उनके द्वारा प्रदान किए जाने वाले लाभों का पुरस्कार प्राप्त कर सकें; आप इसे अपने डेटाबेस एक्सेस विधियों को अधिक मॉड्यूलर संरचना में पुन:सक्रिय करने के अवसर के रूप में भी उपयोग कर सकते हैं।हालांकि, अगर आपके पास तत्काल . है PHP को तुरंत अपग्रेड करने की आवश्यकता है, आप कुछ समय के लिए बहिष्करण त्रुटियों को दबाने पर विचार कर सकते हैं:लेकिन पहले किसी भी अन्य बहिष्करण त्रुटियों की पहचान करना सुनिश्चित करें जिन्हें फेंका जा रहा है।
-
-
आप किसी तृतीय पक्ष प्रोजेक्ट का उपयोग कर रहे हैं जो
ext/mysql
. पर निर्भर करता है .विचार करें कि क्या आपको इस समय वास्तव में PHP v5.5 में अपग्रेड करने की आवश्यकता है।
जांचें कि क्या डेवलपर ने इस विशिष्ट समस्या के संबंध में कोई सुधार, समाधान या मार्गदर्शन जारी किया है; या, यदि नहीं, तो इस मामले को उनके ध्यान में लाकर उन पर ऐसा करने के लिए दबाव डालें। यदि आपके पास तत्काल . है PHP को तुरंत अपग्रेड करने की आवश्यकता है, आप कुछ समय के लिए बहिष्करण त्रुटियों को दबाने पर विचार कर सकते हैं:लेकिन पहले किसी भी अन्य बहिष्करण त्रुटियों की पहचान करना सुनिश्चित करें जिन्हें फेंका जा रहा है।
प्रतिगमन परीक्षण करना नितांत आवश्यक है।