2013-07-18 5 views
5

से बड़ी वेबसाइट स्विच करें मैं MySQL से MySQLi में स्विच करना चाहता हूं, लेकिन मेरे पास एक बहुत बड़ी वेबसाइट है।MySQL से MySQLi

मैंने पढ़ा कि https://wikis.oracle.com/display/mysql/Converting+to+MySQLi मेरी मदद कर सकता है और मैंने How could I change this mysql to mysqli? पढ़ा है। यह कहता है कि मैं फ़ंक्शन में 'i' जोड़ने के साथ अधिकांश कार्यों को प्रतिस्थापित कर सकता हूं, और मुझे bughunting शुरू करना चाहिए।

लेकिन मेरी वेबसाइट बहुत जटिल और बड़ी है, और यह जांचने में बहुत लंबा समय लगेगा कि सबकुछ काम करता है या नहीं। तो: एक बहुत बड़ी वेबसाइट के लिए MySQL से MySQLi में स्विच करने का सबसे अच्छा तरीका क्या है?

धन्यवाद!

+0

कोई आसान तरीका नहीं है। सभी स्क्रिप्ट की जांच करने और कॉल को प्रतिस्थापित करने की आवश्यकता है। और परीक्षण। – Aris

+0

क्या आपके पास टेस्टर्स हैं? – DevZer0

+0

मुख्य चीजें क्या बदलती हैं? बस पैरामीटर और कार्यों का नाम? और नहीं, मेरे पास बहुत सारे टेस्टर्स नहीं हैं ... – Jordy

उत्तर

4

आपके सवाल का कोई आसान जवाब के रूप में व्यावहारिक रूप से यह शामिल अलग ढंग से काम करने के लिए जब आवेदन लिखा गया था करने के लिए हर सरल तरीका है।

यदि आपके पास अपने कोड में mysql_ * कार्यों के लिए सीधी कॉल है और कोई डेटाबेस एब्स्ट्रक्शन लेयर नहीं है जहां आप एक सहायक वर्ग या फ़ंक्शन के माध्यम से अपने प्रश्न पूछते हैं तो आपको प्रत्येक कमांड को संपादित करने की आवश्यकता होगी।

आप न सिर्फ mysql_query की तरह आदेश के लिए एक मैं जोड़ने के साथ प्राप्त कर सकते हैं के रूप में procedurally mysqli_query() db जहां mysql_query() साथ करता है, तो एक कनेक्शन सभी में दिया गया था, यह एक दूसरा पैरामीटर था के लिए लिंक होने के लिए पहले पैरामीटर की आवश्यकता है।

mysql_query (...) को mysqli_query ($ link, .....) में बदलने के बजाय मैं अनुशंसा करता हूं कि डीबी एब्स्ट्रक्शन परत को जगह में रखने के लिए कोई बेहतर समय न हो। तो कार्यों का उपयोग करें जैसे कि sql_query() जो वास्तव में भविष्य में आपके प्रश्नों को संसाधित करता है, यदि आपको फिर से डीबी को बदलने की आवश्यकता है तो आप डीबी विशिष्ट कमांड को एक अबास्ट्रक्शन फ़ाइल में अपडेट कर सकते हैं। इस तरह यदि आप एक ऐसा फ़ंक्शन लिखते हैं जो mysqli_query को लपेटता है तो आप अपने mysql_query() को अपने सहायक फ़ंक्शन में बस नामित करने में सक्षम हो सकते हैं और सहायक को वहां लिंक डालने के बारे में चिंता करने दें।

कि जबकि सबसे सरल तरीका है, यह मापदंडों बाँध या बयान जो एसक्यूएल इंजेक्शन को रोकने में एक प्रमुख कारक है

कमजोरियों एक बार जब आप इन सभी आदेशों आप परीक्षण की आवश्यकता को बदल दिया है तैयार नहीं होंगे।

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

+0

इस नौकरी के साथ एक नौसिखिया प्रोग्रामर के रूप में मैं क्या किया जाना चाहिए में टूटने की सराहना करता हूं, लेकिन हमेशा की तरह, एक तंग समय सीमा भी जुड़ी हुई है और मुझे सीखने का समय नहीं है: एक अमूर्त परत कैसे काम करती है; स्वचालित परीक्षण कैसे किए जाते हैं (ओओपी के लिए बहुत नया)। यदि आपके पास इस विषय पर अच्छा प्रलेखन है तो मैं इसकी सराहना करता हूं, लेकिन सबसे अधिक संभावना है कि मुझे तुरंत 'mysql_ * 'कॉलों को प्रतिस्थापित करना शुरू करना होगा। अग्रिम में धन्यवाद –

-1

आप सही कदम उठा रहे हैं क्योंकि mysql_ * फ़ंक्शन को नवीनतम PHP संस्करण के लिए बहिष्कृत किया गया है। आप इस उद्देश्य के लिए एक कनवर्टर डाउनलोड करना चाहिए ... इस और डाउनलोड देखें ... mysql to mysqli

+1

यह वास्तव में एक गलत कदम है। इस तरह के एक यांत्रिक प्रतिस्थापन सुरक्षा के लिए कुछ भी नहीं जोड़ देगा। और ओपी पहले से ही उस लिंक है। –

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