Rumah > pembangunan bahagian belakang > tutorial php > Mengapa mysqli::query() saya gagal dengan Ralat Sambungan Pangkalan Data 'Tidak dapat mengambil mysqli'?

Mengapa mysqli::query() saya gagal dengan Ralat Sambungan Pangkalan Data 'Tidak dapat mengambil mysqli'?

Susan Sarandon
Lepaskan: 2024-12-07 21:05:14
asal
871 orang telah melayarinya

Why is my mysqli::query() failing with a

Mysqli::query(): Ralat Sambungan Pangkalan Data

Ralat "mysqli::query(): Tidak dapat mengambil mysqli" biasanya menunjukkan masalah dengan sambungan pangkalan data. Langkah berikut menerangkan isu dan menyediakan penyelesaian berdasarkan coretan kod yang disediakan:

  1. Sambungan: Dalam fail sambungan, simbol @ dalam mysqli() baharu digunakan untuk menyekat pelaporan ralat. Walaupun ini bertujuan untuk menghalang paparan ralat, adalah lebih baik untuk mengendalikan ralat dengan betul dan bukannya mengabaikannya.
  2. Penutup: Dalam pembina kelas, anda menetapkan $DBConnect kepada pembolehubah ahli kelas. Ini memastikan bahawa objek sambungan tersedia di seluruh kelas. Walau bagaimanapun, dalam kaedah __destruct(), anda menutup sambungan jika tiada ralat sambungan. Ini adalah isu kerana pertanyaan berikutnya akan gagal kerana sambungan tidak lagi tersedia.
  3. Membuka semula: Kaedah __wakeup() bertujuan untuk membuka semula sambungan selepas bersiri. Walau bagaimanapun, ia tidak digunakan apabila kelas dibuat instantiate, yang bermaksud sambungan kekal tertutup.

Penyelesaian:

  1. Alih keluar simbol @ daripada instantiasi objek sambungan. Tangani ralat dengan cara yang lebih mantap.
  2. Alihkan kod penutup sambungan ke kaedah berasingan dan panggilnya hanya apabila perlu untuk menutup sambungan.
  3. Pastikan kaedah __wakeup() digunakan apabila kelas dijadikan instantiated (cth., apabila mendapatkan semula objek daripada a sesi).

Kod Diubah Suai:

// Connection file
$DBConnect = new mysqli("localhost", "root@localhost", NULL, "Ladle");

// Check for connection error
if ($DBConnect->connect_errno) {
    $ErrorMsgs[] = "The database server is not available. Connect Error is " . $DBConnect->connect_errno . " " . $DBConnect->connect_error . ".";
}

// Class
class EventCalendar {
    private $DBConnect = NULL;

    function __construct() {
        include("inc_LadleDB.php");
        $this->DBConnect = $DBConnect;
    }

    function __destruct() {
        // Close the connection only if it's not closed already
        if (!$this->DBConnect->connect_error) {
            $this->DBConnect->close();
        }
    }

    function __wakeup() {
        // Include the database connection data
        include("inc_LadleDB.php");
        $this->DBConnect = $DBConnect;
    }
    
    // Event adding method
    // ...
}
Salin selepas log masuk

Atas ialah kandungan terperinci Mengapa mysqli::query() saya gagal dengan Ralat Sambungan Pangkalan Data 'Tidak dapat mengambil mysqli'?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan