Signatur
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
mysqlistehtmysqli_ping()als direkter Ersatz bereit. - Mit PDO gibt es keine direkte Ping-Methode; hier empfiehlt sich ein einfaches
SELECT 1als 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
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);
?>
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();
?>
// 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.