Aktueller Standort: Startseite> Neueste Artikel> Ich habe vergessen, das Ergebnissatz freizugeben

Ich habe vergessen, das Ergebnissatz freizugeben

M66 2025-05-29

Bei Verwendung von MySQLI für Datenbankoperationen stoßen wir häufig auf das Problem abnormaler Änderungen in MySQLI :: $ errno . MySQLI :: $ errno ist ein Attribut, mit dem Fehlercodes während der Datenbankverbindung oder Abfrage abgerufen werden. Es kann in der Regel den Entwicklern helfen, Fehler zu beheben. Wenn wir jedoch eine Anfrage vornehmen, stellen wir gelegentlich fest, dass der Wert von MySQLI :: $ errno nicht mit den Erwartungen in Widerspruch geändert hat, was zu unerwarteten Verhalten im Programm führt. Zu diesem Zeitpunkt wird häufig ein potenzieller Grund übersehen - das Ergebnissatz wird nicht veröffentlicht.

Was ist MySQLI :: $ errno ?

Mysqli :: $ errno ist eine Eigenschaft des MySQLi -Objekts. Es speichert den Fehlercode, der während der vorherigen MySQL -Operation generiert wurde (z. B. Abfrage, Verbindung usw.). Wenn die Operation erfolgreich ist, wird MySQLI :: $ errno 0 zurückgeben; Wenn die Operation fehlschlägt, gibt es einen Fehlercode ungleich Null zurück. Sie können die spezifische Ursache des MySQL -Fehlers basierend auf diesen Fehlercodes finden.

Häufige Fehlercodes umfassen:

  • 1045: Zugriff verweigert (Zugriff verweigert für den Benutzer)

  • 1064: Syntaxfehler (Syntaxfehler)

  • 2002: Eine Verbindung zum MySQL -Server kann keine Verbindung hergestellt werden (kann keine Verbindung zum MySQL -Server herstellen)

Wenn die Datenbankoperation fehlschlägt, können wir normalerweise MySQLI :: $ Errno und MySQLI :: $ Fehler (Fehlermeldung) verwenden, um das Problem zu bestimmen.

Warum ändert sich es ungewöhnlich?

Bei der Verwendung von MySQLI zum Abfragen wird der Wert von MySQLI :: $ errno manchmal wie erwartet nicht mehr zu tun, insbesondere nachdem die Abfrage ausgeführt wurde. Wenn Sie das in der Zeit festgelegte Abfrageergebnis nicht veröffentlichen, kann MySQLI :: $ errno ein unwirklicher Fehlercode werden. Dies liegt daran, dass die Verbindungsressourcen von MySQL nicht vollständig veröffentlicht werden, was zu nachfolgenden Abfragen führt, die möglicherweise betroffen sein.

Die Rolle der Veröffentlichung des Ergebnissatzes

Wenn wir Funktionen wie MySQLI_Query () verwenden, um eine Abfrage auszuführen, speichert MySQL die Abfrageergebnisse im Speicher. Um Ressourcen zu speichern, sollten wir nach Abschluss der Abfrage die Funktion mySQLI_Free_Result () verwenden, um das Abfrageergebnissatz explizit freizugeben. Dies hilft nicht nur dem freien Speicher, sondern vermeidet auch nachfolgende Operationen, die möglicherweise durch unveröffentlichte Ergebnissätze beeinflusst werden.

Es wird kein Ergebnissatz veröffentlicht

Angenommen, Sie führen eine Abfrage aus und nachdem die Abfrage abgeschlossen ist, wird MySQLI_FREE_RESULT () nicht aufgerufen, um das Ergebnissatz freizugeben. Wenn Sie versuchen, einen weiteren Abfragevorgang auszuführen, können Sie auf die folgende Situation stoßen:

 <?php
// Stellen Sie eine Verbindung zur Datenbank her
$mysqli = new mysqli('localhost', 'root', 'password', 'test_db');

// Führen Sie die erste Abfrage aus
$result1 = $mysqli->query("SELECT * FROM users");

// Wenn kein Ergebnissatz veröffentlicht wird
// $mysqli->free_result($result1);  // Ignoriere die Veröffentlichung

// Führen Sie die zweite Abfrage aus
$result2 = $mysqli->query("SELECT * FROM orders");

// Fehlermeldung abrufen
echo "Fehlercode: " . $mysqli->errno;
?>

Da im obigen Code das Ergebnissatz der ersten Abfrage nicht veröffentlicht wurde, kann $ mySQLi-> errno eine Ausnahme in der zweiten Abfrage haben, was dazu führt, dass die Fehlercode nicht in der Lage ist, den Fehlercode korrekt zu erhalten, und sogar ein Fehlerstatuscode zurückgegeben wird. Dies ist die Grundursache für die abnormale Veränderung von MySQLI :: $ errno .

Wie löst ich es?

Um abnormale Änderungen in MySQLI :: $ errno zu vermeiden, müssen wir sicherstellen, dass das Abfrageergebnissatz rechtzeitig nach Ausführung jeder Abfrage freigegeben wird. Der richtige Weg, dies zu tun, ist:

 <?php
// Stellen Sie eine Verbindung zur Datenbank her
$mysqli = new mysqli('localhost', 'root', 'password', 'test_db');

// Führen Sie die erste Abfrage aus
$result1 = $mysqli->query("SELECT * FROM users");

// Füllen Sie das Ergebnissatz frei
if ($result1) {
    $result1->free();
}

// Führen Sie die zweite Abfrage aus
$result2 = $mysqli->query("SELECT * FROM orders");

// Fehlermeldung abrufen
echo "Fehlercode: " . $mysqli->errno;
?>

Durch explizites Veröffentlichung des Ergebnissatzes ist es möglich, sicherzustellen, dass die Ressourcen nach jeder Abfrage gereinigt werden und die nachfolgenden Operationen nicht beeinträchtigen.

Zusammenfassung

Wenn Sie MySQLI für Datenbankoperationen verwenden, besteht der Grund für abnormale Änderungen in MySQLI :: $ errno häufig daran, das Abfrageergebnissatz freizugeben. Durch die Veröffentlichung des Ergebnissatzes wird nicht nur Speicher gespeichert, sondern stellt auch sicher, dass nachfolgende Operationen nicht beeinträchtigt sind. Nach Abschluss jeder Abfrage sollten wir daher mySQLI_FREE_RESULT () oder $ result-> Free () rechtzeitig verwenden, um die Abfrageergebnis-Set freizugeben, wodurch unnötige Fehler und Ausnahmen vermieden werden.

Verwandte Ressourcen

Um Ihnen zu helfen, die MySQLI -Operationen besser zu verstehen und Fehler zu vermeiden, können Sie sich auf die folgenden Ressourcen beziehen: