Aktueller Standort: Startseite> Neueste Artikel> Warum ist $ errno immer 0, aber die Abfrage ist nicht erfolgreich?

Warum ist $ errno immer 0, aber die Abfrage ist nicht erfolgreich?

M66 2025-05-30

Die MySQL -Erweiterung ist eine häufige Wahl bei der Verwendung von PHP und MySQL für Datenbankvorgänge. Bei Fehlern in der Debugging -Datenbankabfragen sind MySQLI :: $ Errno und MySQLI :: $ ERROR sehr nützliche Tools. Sie können Entwicklern helfen, Datenbankfehlercodes und Fehlerinformationen zu erhalten. Manchmal können Entwickler dieser Situation jedoch begegnen: MySQLI :: $ errno gibt 0 zurück, aber die Abfrageoperation schlägt immer noch fehl. Warum passiert das? Lassen Sie es uns unten eingehend diskutieren.

1. Die Rolle von MySQLI :: $ errno

Die MySQLI :: $ errno -Eigenschaft enthält den Fehlercode, der in der letzten MySQL -Operation aufgetreten ist. Typischerweise bedeutet 0 , dass kein Fehler aufgetreten ist, während ein Wert ungleich Null angibt, dass einiger Fehler aufgetreten sind. Dies ist der Fehlercode im MySQL -Datenbanksystem. Zusammen mit MySQLI :: $ ERROR kann es uns helfen, das Problem schnell zu finden.

2. Der Fall, in dem MySQLI :: $ errno 0 zurückgibt 0

Trotz des Abfragemehls kehrt MySQLI :: $ errno immer noch 0 zurück, was aus mehreren Gründen liegen kann:

2.1 Die SQL -Abfrage selbst generiert keinen MySQL -Fehler

MySQLI :: $ errno gibt den Fehlercode nur auf dem MySQL -Server zurück. Wenn Ihre Abfrage keinen MySQL -Fehler auslöst (z. B. Syntaxfehler, Verbindungsprobleme usw.), dann ist MySQLI :: $ errno möglicherweise immer noch 0 . Zu diesem Zeitpunkt sollte angemerkt werden, dass auch wenn die Abfrage ein leeres Ergebnis zurückgibt, dies nicht bedeutet, dass während der Ausführung von MySQL ein Fehler aufgetreten ist.

Wenn die Abfrage beispielsweise keine Ergebnisse übereinstimmt, gibt MySQL keinen Fehler zurück, sondern lediglich ein leeres Ergebnissatz zurück. Zu diesem Zeitpunkt ist MySQLI :: $ errno immer noch 0 , und die Abfrage selbst scheitert nicht.

2.2 SQL-Abfrage vom Typ Nicht-Fehler wird verwendet

Einige SQL -Abfragen (z. B. einfügen , aktualisieren oder löschen ) können erfolgreich ausgeführt werden, aber die Anzahl der betroffenen Zeilen beträgt 0 , dh die Daten in der Datenbank werden nicht tatsächlich geändert. Obwohl dies kein Fehler ist, könnte der Entwickler denken, dass die Abfrage nicht erfolgreich ist, was zu Missverständnissen führt. Um besser zu bestimmen, ob es erfolgreich ist, können Sie mySQLI_AFFECTECED_ROWS () überprüfen, um zu bestätigen, ob Zeilen betroffen sind.

2.3 Datenbankverbindungsprobleme

Manchmal kann die Datenbankverbindung vor Abfrage abgelaufen oder getrennt wurden, und MySQLI :: $ errno gibt keinen Fehler sofort zurück. Sie können MySQLI :: $ Connect_errno überprüfen, um zu bestätigen, ob die Datenbankverbindung normal ist.

3. Wie kann man dieses Problem debuggen?

Wenn Sie feststellen , dass MySQLI :: $ errno immer 0 zurückgibt, aber die Abfrage schlägt immer noch fehl. Sie können die folgende Methode zum Debuggen einnehmen:

3.1 Verwenden Sie MySQLI :: $ ERROR , um weitere Informationen zu erhalten

Die MySQLI :: $ -IR -ERROR -Eigenschaft enthält MySQL -Fehlerinformationen im Zusammenhang mit der aktuellen Operation. Auch wenn MySQLI :: $ Errno 0 zurückgibt, können Sie immer noch einige Hinweise über MySQLI :: $ ERROR erhalten. Auch wenn ERRNO 0 ist, kann Fehler einige zusätzliche Hinweise geben.

 if ($mysqli->errno) {
    echo "Error number: " . $mysqli->errno . "<br>";
    echo "Error message: " . $mysqli->error . "<br>";
}

3.2 SQL -Anweisungen überprüfen

Stellen Sie sicher, dass Ihre SQL -Abfrage keine Syntax- oder Logikfehler enthält. Sie können die Abfrage ausdrucken und direkt in einem Datenbankverwaltungs -Tool wie PHPMYADMIN ausführen, um festzustellen, ob das erwartete Ergebnis zurückgegeben wird.

3.3 Überprüfen Sie die Anzahl der betroffenen Zeilen

Für Einfügen , Aktualisieren oder Löschen von Abfragen sollten die von der Funktion mySQLI_AFFECT_ROWS () zurückgegebenen Ergebnisse nach der Ausführung überprüft werden. Wenn 0 zurückgegeben wird, bedeutet dies, dass zwar die Abfrage ausgeführt wurde, aber keine Daten geändert wurden.

 $affected_rows = $mysqli->affected_rows;
if ($affected_rows === 0) {
    echo "No rows were affected by the query.<br>";
}

3.4 Datenbankverbindungen überprüfen

Wenn Sie vermuten, dass es sich um ein Datenbankverbindungsproblem handelt, können Sie mySQLI_Connect_errno () verwenden, um zu überprüfen, ob die Datenbankverbindung erfolgreich ist.

 if ($mysqli->connect_errno) {
    echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

4. Zusammenfassung

Bei Verwendung von MySQLi :: $ errno , wenn sie 0 zurückgibt, die Abfrage jedoch immer noch fehlschlägt, kann die Abfrage keinen MySQL -Fehler generiert, die Abfrage ändert keine Daten oder es gibt einen anderen Problemtyp anstelle eines MySQL -Fehlers. Um dieses Problem zu lösen, sollten Entwickler Tools wie MySQLI :: $ ERROR , MySQLI_AFFECTECT_ROWS () kombinieren, um ein umfassendes Debugging durchzuführen. In diesen Schritten können Sie Probleme in Datenbankabfragen effektiver identifizieren und beheben.

 // Stellen Sie eine Verbindung zur Datenbank her
$mysqli = new mysqli("localhost", "username", "password", "database");

// Abfrage
$query = "SELECT * FROM some_table WHERE id = 1";
$result = $mysqli->query($query);

// Ergebnisverarbeitung
if ($mysqli->errno) {
    echo "Error number: " . $mysqli->errno . "<br>";
    echo "Error message: " . $mysqli->error . "<br>";
}

// Schließen Sie die Verbindung
$mysqli->close();