errno
Dieser Artikel behandelt die PHP-Funktion mysqli_errno(), die den numerischen Fehlercode der letzten MySQLi-Operation zurückgibt.
Dieser Artikel behandelt die PHP-Funktion mysqli_errno(), die den numerischen Fehlercode für den letzten Aufruf auf einer MySQLi-Verbindung zurückgibt. Sie erfahren, was sie zurückgibt, wie Sie den Code interpretieren, worin der Unterschied zu mysqli_error() besteht und wie Sie sie sowohl mit dem prozeduralen als auch mit dem objektorientierten MySQLi-Stil verwenden.
Was mysqli_errno() macht
mysqli_errno() ist eine eingebaute PHP-Funktion, die den Fehlercode der letzten MySQLi-Funktion zurückgibt, die auf einer bestimmten Verbindung ausgeführt wurde. Sie ist das programmatische Gegenstück zu einer menschenlesbaren Meldung: Während mysqli_error() einen Satz wie "Table 'db.my_table' doesn't exist" liefert, gibt mysqli_errno() die rohe Ganzzahl zurück (hier 1146), gegen die Sie im Code vergleichen können.
Syntax und Rückgabewert
mysqli_errno(mysqli $mysqli): int- Parameter —
$mysqli: eine Verbindung, die vonmysqli_connect()(prozedural) odernew mysqli(...)(objektorientiert) zurückgegeben wurde. - Rückgabewert — der Fehlercode für den letzten Aufruf auf dieser Verbindung, oder
0, wenn kein Fehler aufgetreten ist. Überprüfen Sie immer den Rückgabewert, anstatt das Vorhandensein eines Fehlers vorauszusetzen.
Warum eine Zahl? Numerische Codes sind stabil und lassen sich leicht verzweigen. Der Text einer Fehlermeldung kann sich zwischen MySQL-Versionen oder Sprachumgebungen ändern, aber der Code (z. B.
1062für einen doppelten Schlüssel) bleibt gleich — daher sollten Sie Codes inif/switch-Logik testen.
mysqli_errno() verwenden (prozeduraler Stil)
Die Funktion erfordert eine gültige MySQLi-Verbindung als einziges Argument. Hier ist ein typisches Muster:
Wie verwendet man die Funktion mysqli_errno()?
<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");
if (!$mysqli) {
die("Connection failed: " . mysqli_connect_error());
}
$query = "SELECT * FROM my_table";
$result = mysqli_query($mysqli, $query);
if (!$result) {
$error_code = mysqli_errno($mysqli);
echo "Failed to execute query. Error code: " . $error_code;
exit();
}
mysqli_close($mysqli);
?>Hier überprüfen wir zunächst, ob die Verbindung erfolgreich war, und führen dann eine Abfrage mit mysqli_query() aus. Schlägt die Abfrage fehl (!$result), liefert mysqli_errno($mysqli) den numerischen Code, den wir protokollieren und beenden können.
errno mit mysqli_error() kombinieren
In der Praxis möchten Sie fast immer sowohl den Code (zum Verzweigen) als auch die Meldung (zum Protokollieren oder Anzeigen). Verwenden Sie mysqli_errno() zusammen mit mysqli_error():
<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");
$result = mysqli_query($mysqli, "SELECT * FROM missing_table");
if (!$result) {
$code = mysqli_errno($mysqli); // e.g. 1146
$message = mysqli_error($mysqli); // e.g. "Table 'database.missing_table' doesn't exist"
// Branch on the stable numeric code, not the message text.
if ($code === 1146) {
echo "The table is missing. ";
}
echo "[$code] $message";
}
mysqli_close($mysqli);
?>Objektorientierter Stil
Wenn Sie die Verbindung mit new mysqli(...) erstellen, rufen Sie $mysqli->errno als Eigenschaft auf (und $mysqli->error für die Meldung) anstelle der prozeduralen Funktion:
<?php
$mysqli = new mysqli("localhost", "username", "password", "database");
if (!$mysqli->query("SELECT * FROM missing_table")) {
echo "Error " . $mysqli->errno . ": " . $mysqli->error;
}
$mysqli->close();
?>Beide Stile melden denselben Code — wählen Sie den, der zum Rest Ihrer Codebasis passt. Siehe PHP MySQLi für eine Übersicht der Erweiterung.
Häufige MySQL-Fehlercodes
Einige Codes, die beim Umgang mit MySQLi-Fehlern häufig auftreten:
| Code | Bedeutung |
|---|---|
1045 | Zugriff verweigert für Benutzer (falscher Benutzername/Passwort) |
1049 | Unbekannte Datenbank |
1062 | Doppelter Eintrag für einen eindeutigen/primären Schlüssel |
1146 | Tabelle existiert nicht |
1264 | Wert außerhalb des gültigen Bereichs für eine Spalte |
1452 | Fremdschlüssel-Constraint-Verletzung |
Die vollständige Liste finden Sie in der offiziellen MySQL-Server-Fehlerreferenz.
Erweiterte Verwendung
Die Funktion mysqli_errno() kann auch in komplexeren Szenarien eingesetzt werden. Bei mehreren Verbindungen müssen Sie das spezifische MySQLi-Objekt an die Funktion übergeben, um den Fehlercode für die jeweilige Verbindung abzurufen. Hier ist ein Beispiel:
Erweiterte Verwendung von PHP mysqli_errno()
<?php
$mysqli1 = mysqli_connect("localhost", "username", "password", "database1");
$mysqli2 = mysqli_connect("localhost", "username", "password", "database2");
if (!$mysqli1 || !$mysqli2) {
die("One or more connections failed.");
}
$query = "SELECT * FROM my_table";
$result1 = mysqli_query($mysqli1, $query);
$result2 = mysqli_query($mysqli2, $query);
if (!$result1) {
$error_code = mysqli_errno($mysqli1);
echo "Failed to execute query on connection 1. Error code: " . $error_code;
exit();
}
if (!$result2) {
$error_code = mysqli_errno($mysqli2);
echo "Failed to execute query on connection 2. Error code: " . $error_code;
exit();
}
mysqli_close($mysqli1);
mysqli_close($mysqli2);
?>In diesem Beispiel erstellen wir zwei MySQLi-Objekte und verbinden uns mit zwei verschiedenen MySQL-Datenbanken. Anschließend führen wir dieselbe Abfrage über jede Verbindung aus und speichern das Ergebnis in einer Variablen. Wir prüfen mit der Bedingung !$result, ob bei jeder Abfrage ein Fehler aufgetreten ist. Ist ein Fehler aufgetreten, rufen wir mysqli_errno() für das entsprechende MySQLi-Objekt auf, um den Fehlercode für diese spezifische Verbindung zu erhalten. Wir geben dann den Fehlercode aus und beenden das Skript.
Hinweis:
mysqli_errno()meldet den Fehler für eine bestimmte Verbindung. Bei mehreren offenen Verbindungen ist der Code auf das jeweilige Verbindungsobjekt beschränkt, das Sie übergeben — übergeben Sie daher immer das richtige.
Verwandte Funktionen
mysqli_connect_errno()— Fehlercode für einen fehlgeschlagenen Verbindungsversuch (wenn die Verbindung selbst nicht hergestellt werden konnte).mysqli_connect_error()— die Meldung für einen fehlgeschlagenen Verbindungsversuch.error_get_last()— der letzte PHP-Fehler (nicht MySQLi-spezifisch).
Fazit
mysqli_errno() gibt den numerischen Fehlercode für die letzte Operation auf einer MySQLi-Verbindung zurück, oder 0, wenn kein Fehler aufgetreten ist. Kombinieren Sie die Funktion mit mysqli_error() für die Meldung, verzweigen Sie auf den stabilen numerischen Code und übergeben Sie das richtige Verbindungsobjekt, wenn mehrere geöffnet sind — das ist die Grundlage einer robusten MySQLi-Fehlerbehandlung.