Aktueller Standort: Startseite> Neueste Artikel> Wissen Sie? Mysqli :: $ errno wird nicht automatisch zurückgesetzt. Achten Sie auf diese Fallstrick, wenn Sie sie verwenden

Wissen Sie? Mysqli :: $ errno wird nicht automatisch zurückgesetzt. Achten Sie auf diese Fallstrick, wenn Sie sie verwenden

M66 2025-06-23

Bei der Verwendung von PHP -Erweiterung von PHP ist MySQLI :: $ errno eine sehr wichtige Eigenschaft, die die Fehlercodes aus der letzten Datenbankoperation speichert. Normalerweise werden wir feststellen, ob der Datenbankvorgang erfolgreich ist oder die Fehlerverarbeitung durchführt. Aber es gibt einen bemerkenswerten Punkt, Mysqli :: $ errno , was zu einigen nicht nachweisbaren Fehlern führen kann. Lassen Sie uns heute dieses Problem diskutieren.

1. Die Rolle von MySQLI :: $ errno

Mysqli :: $ errno ist eine Eigenschaft der MySQLI -Klasse, die den Fehlercode der letzten Datenbankoperation zurückgibt. Wenn der Datenbankvorgang kein Fehler vorliegt, gibt MySQLI :: $ errno 0 zurück. Stattdessen gibt er einen Fehlercode zurück, der den spezifischen Fehlertyp angibt.

Wenn beispielsweise eine Abfrage ausgeführt wird, gibt MySQLI :: $ errno 0 zurück, wenn die Abfrage erfolgreich ist. Wenn die Abfrage fehlschlägt, wird der entsprechende Fehlercode zurückgegeben.

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_errno) {
    echo "Verbindung ist fehlgeschlagen: " . $mysqli->connect_error;
    exit();
}

$query = "SELECT * FROM non_existent_table";
$mysqli->query($query);

if ($mysqli->errno) {
    echo "Abfrage fehlgeschlagen,Fehlercode:" . $mysqli->errno;
}
?>

Wenn bei der Ausführung einer Abfrage ein Fehler auftritt, gibt $ mysqli-> errno im obigen Beispiel eine Nummer zurück, die den Fehler angibt.

2. Schlüsselfrage: Mysqli :: $ errno wird nicht automatisch zurückgesetzt

Das Problem tritt auf, wenn MySQLI :: $ errno vor jeder neuen Datenbankoperation nicht automatisch gelöscht wird. In einigen Fällen können Fehlercodes auftreten, was dazu führt, dass nachfolgende Datenbankvorgänge als Fehler falsch eingeschätzt werden. Dies kann bei der Behandlung bestimmter Vorgänge sehr verwirrt werden, da $ MySQLi-> Errno auch dann den Fehlercode des letzten Fehlers zurückgibt, selbst wenn bei nachfolgenden Operationen kein Fehler vorliegt.

Zum Beispiel:

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");

$query1 = "SELECT * FROM valid_table";
$mysqli->query($query1);

$query2 = "SELECT * FROM non_existent_table";
$mysqli->query($query2);

// zu diesem Zeitpunkt,$mysqli->errno 依然会返回上次错误查询的Fehlercode,而不是当前查询的Fehlercode
if ($mysqli->errno) {
    echo "Abfrage fehlgeschlagen,Fehlercode:" . $mysqli->errno;
}
?>

Im obigen Code kann $ mysqli-> errno den richtigen Fehlercode möglicherweise nicht sofort angezeigt, selbst wenn die zweite Abfrage fehlschlägt (Abfrage nach einer Tabelle, die nicht vorhanden ist). Tatsächlich kann der Fehlercode für die erste Abfrage (falls vorhanden) angezeigt werden, was zu einem Fehleinschätzung führt.

3. wie man dieses Problem vermeidet

Um diese Fallstrick zu vermeiden, können Sie MySQLI :: $ errno jedes Mal, wenn Sie eine neue Abfrage oder Datenbankoperation ausführen, manuell auf 0 zurücksetzen. Alle Fehlercodes können durch die MySQLI :: Clear_errors () -Methode gelöscht werden.

 <?php
$mysqli = new mysqli("localhost", "user", "password", "database");

$query1 = "SELECT * FROM valid_table";
$mysqli->query($query1);

// Fehlern manuell löschen
$mysqli->clear_errors();

$query2 = "SELECT * FROM non_existent_table";
$mysqli->query($query2);

if ($mysqli->errno) {
    echo "Abfrage fehlgeschlagen,Fehlercode:" . $mysqli->errno;
}
?>

Auf diese Weise können Sie sicherstellen, dass $ mysqli-> errno vor jeder Abfrage sauber ist und vermieden werden, dass alte Fehlercodes neue Operationen beeinträchtigen.

4. Schlussfolgerung

MySQLI :: $ errno ist eine sehr nützliche Eigenschaft in MySQLI, die uns helfen kann, Datenbankfehler zu identifizieren und zu behandeln. Es hat jedoch eine versteckte Grube: Es wird nicht automatisch zurückgesetzt. Dies bedeutet, dass der Fehlercode beibehalten werden kann, wenn Sie den Fehlercode nicht manuell löschen, was sich auf die Fehlerbehandlung der nachfolgenden Operationen auswirkt. Um dies zu vermeiden, wird empfohlen, den Fehlercode mit der MySQLI :: Clear_errors () -Methode () manuell zu löschen, bevor eine neue Datenbankoperation durchgeführt wird.