Heim >Backend-Entwicklung >PHP-Tutorial >Warum schlägt mein mysqli::query() mit dem Datenbankverbindungsfehler „Mysqli konnte nicht abgerufen werden' fehl?

Warum schlägt mein mysqli::query() mit dem Datenbankverbindungsfehler „Mysqli konnte nicht abgerufen werden' fehl?

Susan Sarandon
Susan SarandonOriginal
2024-12-07 21:05:14785Durchsuche

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

Mysqli::query(): Datenbankverbindungsfehler

Der Fehler „mysqli::query(): Konnte mysqli nicht abrufen“. weist typischerweise auf ein Problem mit der Datenbankverbindung hin. Die folgenden Schritte beschreiben das Problem und bieten eine Lösung basierend auf dem bereitgestellten Code-Snippet:

  1. Verbindung: In der Verbindungsdatei wird das @-Symbol in new mysqli() verwendet Unterdrücken Sie die Fehlermeldung. Dies soll zwar die Anzeige von Fehlern verhindern, es ist jedoch besser, Fehler richtig zu behandeln, anstatt sie zu ignorieren.
  2. Abschluss: Im Klassenkonstruktor weisen Sie $DBConnect einer Klassenmitgliedsvariablen zu. Dadurch wird sichergestellt, dass das Verbindungsobjekt in der gesamten Klasse verfügbar ist. Allerdings schließen Sie in der Methode __destruct() die Verbindung, wenn kein Verbindungsfehler vorliegt. Dies stellt ein Problem dar, da nachfolgende Abfragen fehlschlagen würden, da die Verbindung nicht mehr verfügbar ist.
  3. Erneutes Öffnen: Die Methode __wakeup() soll die Verbindung nach der Serialisierung wieder öffnen. Es wird jedoch nicht aufgerufen, wenn die Klasse instanziiert wird, was bedeutet, dass die Verbindung geschlossen bleibt.

Lösung:

  1. Entfernen Sie das @-Symbol aus der Instanziierung des Verbindungsobjekts. Behandeln Sie Fehler robuster.
  2. Verschieben Sie den Code zum Schließen der Verbindung in eine separate Methode und rufen Sie ihn nur auf, wenn die Verbindung geschlossen werden muss.
  3. Stellen Sie sicher, dass die Methode __wakeup() aufgerufen wird wenn die Klasse instanziiert wird (z. B. beim Abrufen eines Objekts aus einer Sitzung).

Geändert Code:

// 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
    // ...
}

Das obige ist der detaillierte Inhalt vonWarum schlägt mein mysqli::query() mit dem Datenbankverbindungsfehler „Mysqli konnte nicht abgerufen werden' fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn