PHP menggunakan sumber daya sebagai variabel khusus untuk menyimpan tautan ke objek eksternal, seperti file dan koneksi database. Setiap sumber daya diberikan id integer. (Dokumentasi )
Koneksi Gagal
Jika koneksi database gagal, Anda mungkin akan mendapatkan kesalahan "Specified variable is not a valid MySQL-Link resource", seperti yang disebutkan Dan Breen, karena variabel yang seharusnya menampung sumber daya adalah null.
$link = mysql_connect('localsoth','baduser','badpass'); // failed connection
$result = mysql_query("SELECT 1", $link); // throws error
Karena Anda mendapatkan ID sumber daya tertentu dalam pesan kesalahan, koneksi database kemungkinan ditutup secara tidak terduga karena suatu alasan. Program Anda masih memiliki variabel dengan ID sumber daya, tetapi objek eksternal tidak ada lagi. Ini mungkin karena mysql_close()
panggilan ke suatu tempat sebelum panggilan ke mysql_query
, atau kesalahan basis data eksternal yang menutup sambungan.
$link = mysql_connect();
mysql_close($link);
// $link may still contain a resource identifier, but the external object is gone
mysql_query("SELECT 1", $link);
Menggunakan Kembali Koneksi
Masalah dengan ekstensi mysql dan mysql_connect()
adalah bahwa secara default jika Anda meneruskan parameter yang sama dalam panggilan berturut-turut, itu akan menggunakan kembali koneksi yang ada daripada membuat yang baru (Dokumentasi
). Ini dapat diperbaiki dengan meneruskan true
ke $new_link
parameter.
Saya mengalami ini sendiri pada sistem pengujian di mana data dari dua database terpisah dalam produksi digabungkan ke satu server pengujian, dan dalam pengujian mysql_xxx()
panggilan fungsi berjalan satu sama lain dan merusak sistem.
$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
Menggunakan $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
Sunting:
Sebagai tambahan, saya akan merekomendasikan menggunakan MySQLi ekstensi atau PDO
sebagai gantinya, jika memungkinkan. Ekstensi MySQL sudah cukup tua, dan tidak dapat memanfaatkan fitur apa pun setelah MySQL versi 4.1.3. Lihat http://www.php.net/manual/en/mysqli .overview.php
untuk beberapa detail tentang perbedaan antara ketiga antarmuka.