mysqli::query(): Objek MySQL Telah Ditutup atau Tidak Dapat Mengambil Ralat MySQL
Masalah
Semasa melaksanakan skrip PHP, anda menghadapi perkara berikut ralat:
-
PHP 7: mysqli::query(): Tidak dapat mengambil MySQL dalam [script_path] pada talian [line_number]
-
PHP 8: Ralat Tidak Ditangkap: Objek MySQL sudah ada ditutup
Penjelasan
Ralat ini menunjukkan bahawa skrip PHP anda sedang cuba melakukan pertanyaan MySQL selepas objek sambungan MySQL telah ditutup.
Penyelesaian
Pastikan objek sambungan MySQL anda masih aktif sebelum melaksanakan sebarang pertanyaan.
// Check if the MySQL connection is open
if ($mysqli->connect_error) {
// Handle the connection error
} else {
// Execute the query
$result = $mysqli->query($query);
}
Salin selepas log masuk
Punca Kemungkinan
-
Menutup sambungan terlalu awal: Pastikan anda menutup sambungan MySQL sahaja selepas semua pertanyaan telah dilaksanakan.
-
Destructor isu: Elakkan menutup sambungan MySQL dalam kaedah pemusnah (__destruct) kelas jika masih terdapat pertanyaan yang perlu dilakukan.
-
Pembolehubah sambungan yang tidak diisytiharkan dengan betul: Semak bahawa pembolehubah sambungan MySQL ($mysqli dalam kes ini) diisytiharkan dan diberikan dengan betul sepanjang anda skrip.
Nota Tambahan
- Dalam coretan kod yang disediakan untuk kelas EventCalendar, sambungan MySQL ditutup dalam kaedah pemusnah (__destruct) . Ini boleh menjadi isu jika pertanyaan masih diperlukan selepas pemusnah dipanggil.
- Pastikan anda menggunakan versi PHP dan sambungan MySQL yang betul.
- Semak log pelayan MySQL untuk sebarang ralat tambahan mesej.
Atas ialah kandungan terperinci Mengapa skrip PHP saya membuang 'mysqli::query(): Objek MySQL Sudah Ditutup atau Tidak Dapat Mengambil Ralat MySQL'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!