W3docs

ping

In diesem Artikel wird die Funktion mysqli_ping() in PHP behandelt, mit der geprüft wird, ob eine Verbindung zum MySQL-Server aktiv ist.

Dieser Artikel behandelt die Funktion mysqli_ping() in PHP, die prüft, ob eine Verbindung zum MySQL-Server noch aktiv ist und, sofern unterstützt, eine unterbrochene Verbindung transparent wiederherstellt. Sie werden sowohl die objektorientierte als auch die prozedurale Syntax, die Funktionssignatur, den geeigneten Einsatzbereich und die wichtige Veraltungsankündigung in PHP 8.4 kennenlernen.

Was mysqli_ping() tut

mysqli_ping() pingt eine aktive MySQL-Verbindung an. Ist die Verbindung aktiv, gibt sie true zurück. Ist die Verbindung unterbrochen, versucht die Funktion eine Wiederverbindung, wenn die Konfigurationsdirektive mysqli.reconnect aktiviert ist, und gibt bei erfolgreicher Wiederverbindung true bzw. false zurück, wenn die Verbindung nicht wiederhergestellt werden kann.

Sie ist vor allem bei lang laufenden Skripten (Worker, Daemons, Queue-Consumer) hilfreich, bei denen eine Verbindung lange genug inaktiv sein kann, damit der Server sie nach wait_timeout Sekunden schließt — der klassische Fehler „MySQL server has gone away". Ein Ping vor einer Abfrage ermöglicht es, diese Situation zu erkennen oder zu beheben.

Syntax

// Object-oriented style
$mysqli->ping(): bool

// Procedural style
mysqli_ping(mysqli $mysql): bool

Parameter

  • $mysql (nur prozedural) — ein Verbindungslink-Bezeichner, der von mysqli_connect() oder mysqli_init() zurückgegeben wird.

Rückgabewerttrue, wenn die Verbindung aktiv ist (oder erfolgreich wiederhergestellt wurde), andernfalls false.

Hinweis zur Veraltung: mysqli_ping() und die automatische Wiederverbindungsfunktion sind ab PHP 8.4 veraltet und werden in zukünftigen Versionen entfernt, da stille Wiederverbindungen den Sitzungsstatus verlieren können (temporäre Tabellen, vorbereitete Anweisungen, Transaktionen, SET-Variablen). Der empfohlene Ansatz besteht darin, die fehlgeschlagene Abfrage abzufangen und selbst eine neue Verbindung zu öffnen.

Objektorientiertes Beispiel

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

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

// ping() automatically attempts to reconnect if the link is dead
if ($mysqli->ping()) {
    echo "Connection is OK!";
} else {
    echo "Error: " . $mysqli->error;
}

$mysqli->close();
?>

Das Skript initialisiert eine MySQLi-Verbindung, überprüft deren Erfolg über connect_errno und ruft dann ping() auf, um zu bestätigen, dass die Verbindung aktiv ist. Es gibt entsprechend eine Erfolgs- oder Fehlermeldung über connect_error aus.

Sicherheitshinweis: Vermeiden Sie es in Produktionsumgebungen, Datenbankzugangsdaten fest im Code zu hinterlegen. Verwenden Sie Umgebungsvariablen oder sichere Konfigurationsdateien, um sensible Daten zu speichern.

Prozedurales Beispiel

Für den prozeduralen Stil können Sie stattdessen mysqli_ping($link) verwenden:

<?php
$link = mysqli_connect("localhost", "username", "password", "database");

if (!$link) {
    die("Connection failed: " . mysqli_connect_error());
}

if (mysqli_ping($link)) {
    echo "Connection is OK!";
} else {
    echo "Error: " . mysqli_error($link);
}

mysqli_close($link);
?>

Empfohlene moderne Alternative

Da ping() in PHP 8.4 veraltet ist, besteht das beständige Muster darin, die Abfrage auszuführen, den „gone away"-Fehler zu erkennen und die Verbindung explizit wiederherzustellen:

<?php
function runWithReconnect(callable $makeConnection, string $sql): mysqli_result|bool
{
    $mysqli = $makeConnection();
    try {
        return $mysqli->query($sql);
    } catch (mysqli_sql_exception $e) {
        // MySQL error 2006: server has gone away — reopen and retry once.
        if ($e->getCode() === 2006) {
            $mysqli = $makeConnection();
            return $mysqli->query($sql);
        }
        throw $e;
    }
}
?>

Dadurch behalten Sie die volle Kontrolle über den Verbindungsstatus, anstatt sich auf eine stille Wiederverbindung zu verlassen.

Fazit

mysqli_ping() ist eine schnelle Möglichkeit zu prüfen, ob eine MySQL-Verbindung noch aktiv ist und bei älteren PHP-Versionen eine unterbrochene Verbindung wiederherzustellen. Sie ist bei lang laufenden Skripten praktisch, aber seit PHP 8.4 veraltet — bevorzugen Sie es, die fehlgeschlagene query() abzufangen und die Verbindung selbst neu zu öffnen. Weitere Informationen zum Aufbau von Verbindungen finden Sie unter mysqli_connect() und der MySQLi-Übersicht.

Übungen

Übung
Was ist der Zweck eines Pings in PHP?
Was ist der Zweck eines Pings in PHP?
Was this page helpful?