Aktueller Standort: Startseite> Neueste Artikel> Ist MySQLI :: $ errno geteilt? Wie man die gegenseitige Kontamination von Fehlerzuständen zwischen mehreren verbundenen Instanzen vermeidet

Ist MySQLI :: $ errno geteilt? Wie man die gegenseitige Kontamination von Fehlerzuständen zwischen mehreren verbundenen Instanzen vermeidet

M66 2025-06-23

In der PHP -Entwicklung spielen die MySQLI :: $ Errno und MySQLI :: $ ERROR -Eigenschaften eine wichtige Rolle bei der Verwendung von MySQLI für Datenbankoperationen. MySQLI :: $ errno wird verwendet, um den Fehlercode für die aktuelle Verbindung zu erhalten, während MySQLI :: $ ERROR verwendet wird, um die Fehlerinformationen zu erhalten. Entwickler begegnen häufig auf dieses Problem: Ist der Wert von MySQLI :: $ Errno in mehreren Datenbankverbindungsinstanzen freigegeben? Wie können wir dann vermeiden, dass die Fehlerzustände zwischen verschiedenen Verbindungen sich gegenseitig beeinflussen? Dieser Artikel wird dieses Problem eingehend analysieren und einige Lösungen bereitstellen, um eine Kontamination von Fehlerzuständen zu vermeiden.

Ist MySQLI :: $ errno geteilt?

Mysqli :: $ errno ist eine Instanzeigenschaft des MySQLI -Objekts, das Fehlercodes enthält, die sich auf die aktuelle Datenbankverbindung beziehen. In normalen Fällen besteht die Rolle von MySQLI :: $ errno darin, den Fehlerstatus in der aktuellen Datenbankverbindungsinstanz aufzuzeichnen.

Ist es geteilt?

Mysqli :: $ errno ist nicht stamm . Das heißt, jede MySQLi -Verbindungsinstanz hat einen eigenen Errno -Zustand. Jede unabhängige Datenbankverbindung führt unabhängig voneinander ihren eigenen Fehlercode, sodass sich die Fehler zwischen verschiedenen Verbindungsinstanzen nicht gegenseitig kontaminieren.

Wenn jedoch mehrere Verbindungsinstanzen über dasselbe MySQLI -Objekt erstellt werden, können sich ihre Fehlerzustände gegenseitig beeinträchtigen. Insbesondere wenn Sie mehrere Datenbankverbindungen verwenden und ein MySQLI -Objekt teilen, wird empfohlen, den Fehlerstatus jeder Verbindung zu verwalten, um inkonsistente Fehlermeldungen zu vermeiden.

Warum verschmutzen die Fehlerzustände sich gegenseitig?

Die Probleme treten hauptsächlich in den folgenden Situationen auf:

  1. Teilen derselben Datenbankverbindung : Wenn mehrere Operationen das gleiche Datenbankverbindungsobjekt (d. H. Die gleiche MySQLI -Instanz) teilen, wird der Fehlerstatus ( ERRNO ) durch die letzte Operation überschrieben und die Fehlermeldung der vorherigen Operation wird verloren.

  2. Wiederverwenden Sie dieselbe MySQLI -Instanz wieder : Wenn Sie wiederholt dieselbe MySQLI -Instanz an verschiedenen Orten verwenden und den Fehlerstatus nicht zurücksetzen, kann dies zu Verwirrung von Fehlermeldungen führen und sogar nachfolgenden Vorgängen beeinflussen.

Wie vermeiden Sie die gegenseitige Kontamination falscher Zustände?

Um die gegenseitige Kontamination zwischen mehreren verbundenen Instanzen zu vermeiden, können die folgenden Methoden verwendet werden:

1. Verwenden Sie verschiedene MySQLI -Instanzen

Der einfachste Weg ist sicherzustellen, dass jede Datenbankverbindung eine separate MySQLI -Instanz verwendet. Auf diese Weise hat jede Verbindung ihre eigenen Errno- und Fehlerzustände und wirkt sich nicht gegenseitig aus.

 // Erstellen Sie die erste Datenbankverbindung
$mysqli1 = new mysqli("localhost", "user1", "password1", "database1");
if ($mysqli1->connect_errno) {
    echo "Verbindung ist fehlgeschlagen: " . $mysqli1->connect_error;
}

// Erstellen Sie eine zweite Datenbankverbindung
$mysqli2 = new mysqli("localhost", "user2", "password2", "database2");
if ($mysqli2->connect_errno) {
    echo "Verbindung ist fehlgeschlagen: " . $mysqli2->connect_error;
}

2. Verwenden Sie MySQLI :: Reset_Eerror -Methode

Die MySQLI -Klasse bietet die Methode reset_error , mit der der Fehlerstatus der Verbindung manuell zurückgesetzt werden kann. Rufen Sie nach jeder Datenbankoperation diese Methode auf, um ERRNO und Fehler zu löschen, um eine Verunreinigung von Fehlinformationen zu vermeiden.

 // Datenbankvorgänge durchführen
$result = $mysqli->query("SELECT * FROM users");
if (!$result) {
    echo "Abfrage fehlgeschlagen: " . $mysqli->error;
}

// Setzen Sie den Fehlerstatus zurück
$mysqli->reset_error();

3. Verwenden Sie verschiedene Datenbankverbindungskonfigurationen

Wenn Ihre Anwendung mit mehreren Datenbanken interagieren muss, sollten Sie verschiedene Verbindungskonfigurationen verwenden, um unabhängige Verbindungsinstanzen zu erstellen. Durch die Konfiguration verschiedener Hostnamen, Benutzernamen, Kennwörter usw. kann sichergestellt werden, dass jede Verbindungsinstanz unter verschiedenen Konfigurationen ausgeführt wird und sich nicht gegenseitig beeinträchtigt.

 // Verwenden Sie die Ausnahmebehandlung, um Fehler zu fangen
try {
    $mysqli->query("SELECT * FROM non_existing_table");
} catch (Exception $e) {
    echo "数据库Abfrage fehlgeschlagen: " . $e->getMessage();
    $mysqli->reset_error();
}