Start · Sprachen · PHP · Referenz · mysql_ping

mysql_ping

Funktion

Prüft, ob eine MySQL-Verbindung noch aktiv ist, und versucht bei Bedarf eine automatische Neuverbindung.

seit PHP 4.3.0 Kategorie: db

Signatur

mysql_ping(resource $link_identifier = NULL): bool

Beschreibung

mysql_ping() sendet einen Ping an den MySQL-Server, um zu prüfen, ob die Verbindung noch besteht. Ist die Verbindung unterbrochen, versucht die Funktion automatisch, eine neue Verbindung herzustellen. Ist die Neuverbindung erfolgreich, gibt die Funktion true zurück.

Die Funktion ist nützlich in langlaufenden Skripten oder Daemon-ähnlichen Prozessen, bei denen die Datenbankverbindung nach längerer Inaktivität vom Server getrennt werden kann (z. B. durch den MySQL-Parameter wait_timeout). Mit einem regelmäßigen Ping kann sichergestellt werden, dass die Verbindung vor einer Datenbankoperation noch gültig ist.

Achtung: Die gesamte mysql_*-Erweiterung ist seit PHP 5.5.0 als veraltet markiert und wurde in PHP 7.0.0 vollständig entfernt. Für neue Projekte sollte stattdessen mysqli_ping() oder PDO verwendet werden.

  • Bei mysqli steht mysqli_ping() als direkter Ersatz bereit.
  • Mit PDO gibt es keine direkte Ping-Methode; hier empfiehlt sich ein einfaches SELECT 1 als Verbindungstest.

Parameter

Name Typ Default Beschreibung
$link_identifier resource NULL Die MySQL-Verbindungsressource, die mit mysql_connect() erstellt wurde. Wird dieser Parameter weggelassen oder ist NULL, wird die zuletzt geöffnete Verbindung verwendet.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Verbindung aktiv ist oder erfolgreich neu aufgebaut wurde. Gibt false zurück, wenn kein Ping möglich war und keine Neuverbindung hergestellt werden konnte.

Beispiele

Verbindung vor einer Abfrage prüfen

<?php
$link = mysql_connect('localhost', 'benutzer', 'geheim');
if (!$link) {
    die('Verbindung fehlgeschlagen: ' . mysql_error());
}

// Simuliere eine lange Wartezeit (z. B. in einem Daemon)
sleep(5);

// Verbindung prüfen und ggf. neu aufbauen
if (!mysql_ping($link)) {
    die('MySQL-Verbindung verloren und konnte nicht wiederhergestellt werden.');
}

$result = mysql_query('SELECT id, name FROM benutzer LIMIT 5', $link);
while ($row = mysql_fetch_assoc($result)) {
    echo $row['id'] . ': ' . $row['name'] . "\n";
}

mysql_close($link);
?>
1: Alice 2: Bob 3: Charlie 4: Diana 5: Eva

Modernes Äquivalent mit mysqli_ping()

<?php
// Empfohlene Alternative: mysqli verwenden
$mysqli = new mysqli('localhost', 'benutzer', 'geheim', 'meinedb');

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

// Verbindung prüfen
if ($mysqli->ping()) {
    echo "Verbindung ist aktiv.\n";
} else {
    echo "Verbindung unterbrochen: " . $mysqli->error . "\n";
}

$mysqli->close();
?>
Verbindung ist aktiv.

// Wichtig · Fallstricke

Veraltete Erweiterung: Die mysql_*-Funktionen wurden in PHP 5.5.0 als deprecated markiert und in PHP 7.0.0 vollständig entfernt. Jeder Einsatz in modernem PHP führt zu einem fatalen Fehler. Migriere auf mysqli oder PDO.

Automatische Neuverbindung: Die automatische Neuverbindung durch mysql_ping() kann in manchen Konfigurationen unerwartetes Verhalten erzeugen (z. B. Verlust von temporären Tabellen oder Sitzungsvariablen). Verlasse dich nicht darauf, ohne den Anwendungszustand anschließend zu validieren.

Kein Ersatz für robuste Fehlerbehandlung: mysql_ping() sollte nicht als alleinige Sicherheitsnetz-Maßnahme eingesetzt werden. Fehler bei Datenbankabfragen sollten immer explizit behandelt werden.