Start · Sprachen · PHP · Referenz · mysqli_errno

mysqli_errno

Funktion

Gibt den numerischen Fehlercode des letzten MySQL-Fehlers der angegebenen Verbindung zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

mysqli_errno(mysqli $mysql): int

Beschreibung

mysqli_errno() liefert den Fehlercode des zuletzt aufgetretenen Fehlers auf einer aktiven MySQL-Verbindung. Der Rückgabewert entspricht den MySQL-internen Fehlernummern (z. B. 1045 für ungültige Zugangsdaten oder 1062 für einen Duplicate-Key-Fehler). War kein Fehler aufgetreten, wird 0 zurückgegeben.

Diese Funktion ist in der prozeduralen API von MySQLi das Äquivalent zur objektorientierten Eigenschaft $mysqli->errno. Sie eignet sich besonders für die Fehlerdiagnose direkt nach einem fehlgeschlagenen Datenbankaufruf (z. B. mysqli_query(), mysqli_connect()) und erlaubt es, gezielt auf bestimmte Fehlercodes zu reagieren.

In professionellen Anwendungen sollte mysqli_errno() in Kombination mit mysqli_error() eingesetzt werden, um neben dem Code auch eine lesbare Fehlermeldung zu erhalten. Für die strukturierte Fehlerbehandlung kann auch der Exception-Modus von MySQLi (über mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT)) bevorzugt werden.

Hinweis: Der Fehlercode bezieht sich stets auf den letzten Funktionsaufruf auf der übergebenen Verbindung. Nach einem erfolgreichen Aufruf wird der Fehlerzustand zurückgesetzt.

Parameter

Name Typ Default Beschreibung
$mysql Pflicht mysqli Eine aktive MySQLi-Verbindungsressource, wie sie von mysqli_connect() oder mysqli_init() zurückgegeben wird.

Rückgabewert

Typ
int
Beschreibung
Der numerische MySQL-Fehlercode des letzten Fehlers. Gibt 0 zurück, wenn kein Fehler aufgetreten ist.

Beispiele

Fehlercode nach fehlgeschlagenem Query auswerten

<?php
$mysqli = mysqli_connect('localhost', 'user', 'password', 'testdb');

if (!$mysqli) {
    echo 'Verbindung fehlgeschlagen. Fehlercode: ' . mysqli_connect_errno();
    exit;
}

// Absichtlich fehlerhafter SQL-Befehl
$result = mysqli_query($mysqli, 'SELECT * FROM nicht_existente_tabelle');

if (!$result) {
    $code    = mysqli_errno($mysqli);
    $message = mysqli_error($mysqli);
    echo "MySQL-Fehler {$code}: {$message}";
}

mysqli_close($mysqli);
MySQL-Fehler 1146: Table 'testdb.nicht_existente_tabelle' doesn't exist

Gezielt auf Duplicate-Key-Fehler reagieren

<?php
$mysqli = mysqli_connect('localhost', 'user', 'password', 'testdb');

// Einfügen eines Datensatzes mit einem bereits vorhandenen Primärschlüssel
$result = mysqli_query($mysqli, "INSERT INTO users (id, name) VALUES (1, 'Max')");

if (!$result) {
    $errno = mysqli_errno($mysqli);

    if ($errno === 1062) {
        echo 'Fehler: Dieser Datensatz existiert bereits (Duplicate Key).';
    } else {
        echo 'Unbekannter Datenbankfehler: ' . mysqli_error($mysqli);
    }
}

mysqli_close($mysqli);
Fehler: Dieser Datensatz existiert bereits (Duplicate Key).

// Wichtig · Fallstricke

Sicherheitshinweis: Geben Sie Fehlercodes und -meldungen niemals direkt an den Endnutzer aus, da diese interne Datenbankstruktur offenbaren können. Loggen Sie Fehler serverseitig und zeigen Sie dem Nutzer nur generische Meldungen.

Für neue Projekte empfiehlt sich die Aktivierung des MySQLi-Exception-Modus mit mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT) vor dem Verbindungsaufbau. Dadurch werden Fehler automatisch als mysqli_sql_exception geworfen und müssen nicht mehr manuell über mysqli_errno() abgefragt werden.

Bei Verbindungsfehlern (noch vor dem Aufbau einer gültigen Verbindung) muss stattdessen mysqli_connect_errno() verwendet werden, da zu diesem Zeitpunkt kein gültiges mysqli-Objekt vorhanden ist.