कनेक्शन विफल होने पर आपकी जांच उस कोड के माध्यम से होती है जो कनेक्शन का उपयोग करता है। जाहिर है कि यह काम नहीं करेगा क्योंकि यह लाइव कनेक्शन नहीं है। सुनिश्चित करें कि यदि कनेक्शन विफल हो जाता है, तो उस पर निर्भर कोड तक नहीं पहुंचा जाता है। (ध्यान दें कि मैं आवश्यक रूप से बाहर निकलने या मरने के उपयोग की वकालत नहीं कर रहा हूं। वे एक खराब उपयोगकर्ता अनुभव के लिए बना सकते हैं। वे उपयोगी हो सकते हैं, लेकिन आदर्श रूप से आपको एक बेहतर संदेश आउटपुट करना चाहिए और बदसूरत त्रुटि सामग्री को लॉग के लिए छोड़ देना चाहिए [जब तक कि आप ' केवल परीक्षण कर रहे हैं या यह एक कमांड लाइन स्क्रिप्ट है])।
करीब () के लिए (जो वास्तव में मुफ्त में एक उपनाम है ()):
मुक्त() मूल रूप से परिणाम से जुड़ी सभी चीजों को हटा देता है। आपको यह समझने की आवश्यकता है कि पंक्तियों को पुनः प्राप्त करने के दो तरीके हैं (सरलीकरण, लेकिन इसके साथ चलें):
बफर्ड - एक ही बार में सब कुछ छीन लिया जाता है। दूसरे शब्दों में, जब तक आप रिकॉर्ड के माध्यम से लूप करना शुरू करते हैं, तब तक वे सभी वास्तव में पहले से ही स्मृति में होते हैं। वे बफ़र्ड हैं . हर बार जब आप फ़ेच() को कॉल करते हैं तो उन्हें सर्वर से नहीं खींचा जा रहा है बल्कि स्मृति से खींचा जा रहा है।
गैर-बफ़र्ड - एक छोटा बफर हो सकता है, लेकिन अनिवार्य रूप से हर बार जब आप फ़ेच () कहते हैं, तो PHP को डेटाबेस से एक नई पंक्ति खींचनी होगी। लूप की शुरुआत में, वे सभी स्मृति में नहीं बैठे हैं।
दिलचस्प नोट:num_rows() को बफ़र की गई क्वेरी पर बहुत कुशलता से कॉल किया जा सकता है क्योंकि सभी पंक्तियाँ पहले ही खींची जा चुकी हैं (हालाँकि आपको केवल उन्हें गिनने के लिए सभी पंक्तियों को कभी नहीं खींचना चाहिए - यही COUNT के लिए है)। गैर बफ़र किए गए प्रश्न num_rows() नहीं कर सकते जब तक कि वे सभी पंक्तियों को नहीं खींच लेते। मतलब यह या तो एक त्रुटि होगी, या अनिवार्य रूप से इसे एक बफर क्वेरी में बदल देगी।
वैसे भी, वापस अपने वास्तविक प्रश्न पर:
मुक्त () परिणाम वस्तु से जुड़ी किसी भी चीज को मुक्त करता है। बफ़र्ड क्वेरी के मामले में, यह स्मृति में बैठी कोई भी पंक्तियाँ हैं। एक गैर-बफ़र्ड क्वेरी के मामले में, फ्री () मेमोरी में जो भी पंक्तियाँ बैठ सकती हैं उन्हें जारी करेगा और फिर बाकी अनुरोध को रद्द कर देगा। मूल रूप से इसका PHP MySQL को बता रहा है, "अरे आप उन सभी पंक्तियों को जानते हैं जिनका मैं अनुरोध करता हूं? मेरा विचार बदल गया। आप बस उस अनुरोध को छोड़ सकते हैं।"
जैसे कि आपको परिणाम मुक्त करना चाहिए... ठीक है, जब भी चर दायरे से बाहर हो जाता है*, यह वैसे भी होगा। हालांकि, इसे स्पष्ट रूप से करने में कोई हानि नहीं है, और ऐसी स्थितियों में जहां एक क्वेरी बहुत अधिक मेमोरी का उपयोग कर सकती है और फिर इसके बाद एक और क्वेरी बहुत मेमोरी का उपयोग कर सकती है, आप केवल मेमोरी उपयोग को कम रखने के लिए सेट को मुक्त करना चाह सकते हैं। ।
* या हो सकता है जब अनुरोध समाप्त हो। मुझे अपने सिर के ऊपर से याद नहीं है।