Start · Sprachen · PHP · Referenz · mysqli_connect_errno

mysqli_connect_errno

Funktion

Gibt den Fehlercode des letzten fehlgeschlagenen <code>mysqli_connect()</code>-Aufrufs zurück.

seit PHP 5.0.0 Kategorie: db

Signatur

mysqli_connect_errno(): int

Beschreibung

mysqli_connect_errno() liefert den numerischen Fehlercode, der beim letzten Verbindungsversuch mit einem MySQL-Server über mysqli_connect() aufgetreten ist. Ist die Verbindung erfolgreich, gibt die Funktion 0 zurück.

Die Funktion ist besonders nützlich, um unmittelbar nach einem Verbindungsaufbau zu prüfen, ob ein Fehler aufgetreten ist, ohne ein gültiges mysqli-Objekt zu benötigen – denn bei einem fehlgeschlagenen Verbindungsaufbau existiert ja noch kein Verbindungs-Objekt, dessen Methoden man aufrufen könnte.

In Kombination mit mysqli_connect_error(), das den Fehlertext zurückgibt, lässt sich eine aussagekräftige Fehlermeldung erzeugen und z. B. in einer Log-Datei speichern. Die Fehlercodes entsprechen den standardisierten MySQL-Fehlercodes.

Ab PHP 8.1.0 wirft mysqli_connect() im Fehlerfall standardmäßig eine mysqli_sql_exception, sodass mysqli_connect_errno() in modernem Code seltener direkt benötigt wird, aber für Legacy-Code und für Umgebungen mit deaktiviertem Exception-Modus weiterhin relevant bleibt.

Rückgabewert

Typ
int
Beschreibung
Gibt den Fehlercode des letzten Verbindungsversuchs zurück. Ist kein Fehler aufgetreten oder wurde noch kein Verbindungsversuch unternommen, wird 0 zurückgegeben.

Beispiele

Verbindungsfehler abfangen und behandeln

<?php
$conn = @mysqli_connect('localhost', 'user', 'wrongpassword', 'mydb');

if (mysqli_connect_errno()) {
    echo 'Verbindung fehlgeschlagen.' . PHP_EOL;
    echo 'Fehlercode: ' . mysqli_connect_errno() . PHP_EOL;
    echo 'Fehlermeldung: ' . mysqli_connect_error() . PHP_EOL;
    exit(1);
}

echo 'Verbindung erfolgreich.';
?>
Verbindung fehlgeschlagen. Fehlercode: 1045 Fehlermeldung: Access denied for user 'user'@'localhost' (using password: YES)

Fehlercode in Logdatei schreiben

<?php
$conn = @mysqli_connect('db.example.com', 'appuser', 'secret', 'appdb', 3306);

$errno = mysqli_connect_errno();
if ($errno !== 0) {
    $logMessage = sprintf(
        '[%s] MySQL-Verbindungsfehler #%d: %s',
        date('Y-m-d H:i:s'),
        $errno,
        mysqli_connect_error()
    );
    error_log($logMessage, 3, '/var/log/app/db_errors.log');
    // Dem Nutzer eine neutrale Fehlermeldung zeigen
    die('Datenbankverbindung nicht möglich. Bitte versuchen Sie es später erneut.');
}

// Ab hier ist $conn gültig
mysqli_close($conn);
?>

// Wichtig · Fallstricke

Sicherheitshinweis: Geben Sie den Rückgabewert von mysqli_connect_errno() oder mysqli_connect_error() niemals direkt an den Endnutzer aus. Die Fehlermeldungen können Informationen über die Datenbankstruktur, Hostnamen oder Benutzernamen enthalten, die für Angreifer nützlich sein könnten. Schreiben Sie Fehler stattdessen in eine Log-Datei.

Ab PHP 8.1: Standardmäßig ist der mysqli-Fehlerberichtsmodus auf MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT gesetzt, wodurch Verbindungsfehler automatisch eine mysqli_sql_exception werfen. In diesem Modus ist eine manuelle Prüfung via mysqli_connect_errno() nicht mehr notwendig; stattdessen sollte try/catch verwendet werden.

Das vorangestellte @ beim mysqli_connect()-Aufruf unterdrückt PHP-Warnungen und kann hilfreich sein, wenn die Fehlerbehandlung vollständig manuell erfolgt.