Start · Sprachen · PHP · Referenz · mysqli_ping

mysqli_ping

Funktion

Pingt eine MySQL-Serververbindung an oder versucht automatisch eine neue Verbindung aufzubauen, wenn die Verbindung unterbrochen wurde.

seit PHP 5.0.0 Kategorie: db

Signatur

mysqli_ping(mysqli $mysql): bool

Beschreibung

mysqli_ping() prüft, ob die Verbindung zum MySQL-Server noch aktiv ist. Ist die Verbindung zwischenzeitlich unterbrochen worden (z. B. durch einen Timeout), versucht die Funktion automatisch, die Verbindung neu aufzubauen. Bei Erfolg gibt sie true zurück, andernfalls false.

Die Funktion ist besonders nützlich in langlaufenden Skripten oder Daemon-Prozessen, in denen zwischen zwei Datenbankabfragen ein längerer Zeitraum vergehen kann, nach dem der MySQL-Server die Verbindung wegen Inaktivität getrennt haben könnte (wait_timeout). Ein einfaches Ping stellt sicher, dass die nachfolgenden Abfragen nicht auf einer toten Verbindung fehlschlagen.

In der objektorientierten Schreibweise lautet der Aufruf $mysqli->ping(). Die Funktion arbeitet sowohl mit persistenten als auch mit normalen Verbindungen.

Hinweis: Ab PHP 8.4 ist mysqli_ping() als veraltet markiert (deprecated). Für neue Projekte sollte stattdessen eine robuste Verbindungsverwaltung mit Fehlerbehandlung und ggf. erneuter Verbindung via mysqli_connect() implementiert werden.

Parameter

Name Typ Default Beschreibung
$mysql Pflicht mysqli Ein von mysqli_connect() oder mysqli_init() zurückgegebenes mysqli-Verbindungsobjekt.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Verbindung aktiv ist oder erfolgreich neu aufgebaut werden konnte. Gibt false zurück, wenn der Ping fehlschlug und keine Verbindung hergestellt werden konnte.

Beispiele

Verbindung in einer Schleife mit Ping prüfen

<?php
$mysqli = mysqli_connect('localhost', 'benutzer', 'passwort', 'testdb');

if (!$mysqli) {
    die('Verbindung fehlgeschlagen: ' . mysqli_connect_error());
}

// Simuliert eine langlaufende Verarbeitung
for ($i = 0; $i < 5; $i++) {
    // Prüfen ob Verbindung noch aktiv ist
    if (!mysqli_ping($mysqli)) {
        echo "Verbindung unterbrochen, konnte nicht wiederhergestellt werden.\n";
        break;
    }
    echo "Ping #{$i} erfolgreich – Verbindung ist aktiv.\n";
    // ... hier folgen Datenbankabfragen ...
    sleep(1);
}

mysqli_close($mysqli);
Ping #0 erfolgreich – Verbindung ist aktiv. Ping #1 erfolgreich – Verbindung ist aktiv. Ping #2 erfolgreich – Verbindung ist aktiv. Ping #3 erfolgreich – Verbindung ist aktiv. Ping #4 erfolgreich – Verbindung ist aktiv.

Objektorientierte Verwendung von ping()

<?php
$mysqli = new mysqli('localhost', 'benutzer', 'passwort', 'testdb');

if ($mysqli->connect_errno) {
    die('Verbindungsfehler: ' . $mysqli->connect_error);
}

if ($mysqli->ping()) {
    echo "Datenbankverbindung ist aktiv und bereit.\n";
} else {
    echo "Datenbankverbindung ist nicht erreichbar: " . $mysqli->error . "\n";
}

$mysqli->close();
Datenbankverbindung ist aktiv und bereit.

// Wichtig · Fallstricke

Deprecation ab PHP 8.4: mysqli_ping() wurde in PHP 8.4 als veraltet markiert und wird in einer zukünftigen PHP-Version entfernt. Für neue Projekte empfiehlt sich eine explizite Fehlerbehandlung bei Datenbankabfragen und ein erneuter Verbindungsaufbau bei Bedarf.

Der automatische Wiederverbindungsversuch (reconnect) ist standardmäßig deaktiviert. Er kann über mysqli_options($mysqli, MYSQLI_OPT_RECONNECT, true) aktiviert werden, was jedoch nicht in allen Umgebungen unterstützt wird und zu unerwarteten Zustandsproblemen (z. B. verlust von Transaktions-Kontext) führen kann.

In hoch frequentierten Webanwendungen sollte mysqli_ping() nicht pauschal vor jeder Abfrage aufgerufen werden, da dies einen zusätzlichen Round-Trip zum Server erzeugt. Besser ist es, Fehler beim eigentlichen Query-Aufruf abzufangen und dann gezielt zu reagieren.