PHP बाहरी वस्तुओं, जैसे फाइलों और डेटाबेस कनेक्शनों के लिंक रखने के लिए एक विशेष चर के रूप में संसाधनों का उपयोग करता है। प्रत्येक संसाधन को एक पूर्णांक आईडी दी जाती है। (दस्तावेज़ीकरण )
विफल कनेक्शन
यदि डेटाबेस कनेक्शन विफल हो जाता है, तो संभवतः आपको "निर्दिष्ट चर एक मान्य MySQL-लिंक संसाधन नहीं है" त्रुटि मिलेगी, जैसा कि डैन ब्रीन ने उल्लेख किया है, क्योंकि संसाधन को धारण करने वाला चर शून्य है।
$link = mysql_connect('localsoth','baduser','badpass'); // failed connection
$result = mysql_query("SELECT 1", $link); // throws error
चूंकि आपको त्रुटि संदेश में एक विशिष्ट संसाधन आईडी मिल रही है, डेटाबेस कनेक्शन किसी कारण से अप्रत्याशित रूप से बंद हो गया है। आपके प्रोग्राम में अभी भी एक संसाधन आईडी के साथ एक चर है, लेकिन बाहरी वस्तु अब मौजूद नहीं है। यह हो सकता है mysql_close()
. के कारण हो mysql_query
. पर कॉल करने से पहले कहीं कॉल करें , या कोई बाहरी डेटाबेस त्रुटि जिसने कनेक्शन बंद कर दिया है।
$link = mysql_connect();
mysql_close($link);
// $link may still contain a resource identifier, but the external object is gone
mysql_query("SELECT 1", $link);
कनेक्शन का पुन:उपयोग करना
mysql एक्सटेंशन और mysql_connect()
. के साथ एक समस्या यह है कि डिफ़ॉल्ट रूप से यदि आप लगातार कॉल में समान पैरामीटर पास करते हैं, तो यह एक नया कनेक्शन बनाने के बजाय मौजूदा कनेक्शन का पुन:उपयोग करेगा (दस्तावेज़ीकरण
) इसे true
. पास करके ठीक किया जा सकता है $new_link
. पर पैरामीटर।
मैंने स्वयं एक परीक्षण प्रणाली पर इसका सामना किया जहां उत्पादन में दो अलग-अलग डेटाबेस के डेटा को एक परीक्षण सर्वर पर और mysql_xxx()
के परीक्षण में संयोजित किया गया था। फ़ंक्शन कॉल एक दूसरे के ऊपर चले गए और सिस्टम को तोड़ दिया।
$link1 = mysql_connect('localhost','user','pass'); // resource id 1 is given
$link2 = mysql_connect('localhost','user','pass'); // resource id 1 is given again
mysql_close($link2); // the connection at resource id 1 is closed
mysql_query("SELECT 1", $link1); // will fail, since the connection was closed
$new_link
का उपयोग करना :
$link1 = mysql_connect('localhost','user','pass'); // resource id 1 is given
$link2 = mysql_connect('localhost','user','pass', true); // resource id 2 is given
mysql_close($link2); // the connection at resource id 2 is closed
mysql_query("SELECT 1", $link1); // the connection at resource id 1 is still open
संपादित करें:
एक तरफ के रूप में, मैं MySQLi<का उपयोग करने की सलाह दूंगा /ए> एक्सटेंशन या PDO
इसके बजाय, यदि संभव हो तो। MySQL एक्सटेंशन बहुत पुराना हो रहा है, और MySQL संस्करण 4.1.3 से पहले की किसी भी सुविधा का लाभ नहीं उठा सकता है। देखें http://www.php.net/manual/en/mysqli .overview.php
तीन इंटरफेस के बीच अंतर पर कुछ विवरण के लिए।