ping
En este artículo nos centramos en la función mysqli_ping() de PHP, que sirve para comprobar si una conexión al servidor MySQL sigue activa.
Este artículo trata la función mysqli_ping() en PHP, que comprueba si una conexión al servidor MySQL sigue activa y, cuando está soportado, reconecta de forma transparente un enlace caído. Verás tanto la sintaxis orientada a objetos como la procedimental, la firma de la función, cuándo utilizarla y la importante obsolescencia en PHP 8.4.
Qué hace mysqli_ping()
mysqli_ping() hace ping a una conexión MySQL activa. Si la conexión está viva, devuelve true. Si el enlace está caído, la función intenta reconectar cuando la directiva de configuración mysqli.reconnect está habilitada, y devuelve true si la reconexión tiene éxito o false si no puede restablecerse.
Es más útil en scripts de larga ejecución (workers, daemons, consumidores de colas) donde una conexión puede estar inactiva el tiempo suficiente para que el servidor la cierre después de wait_timeout segundos — el clásico error "MySQL server has gone away". Hacer ping antes de una consulta permite detectar o recuperarse de esa situación.
Sintaxis
// Object-oriented style
$mysqli->ping(): bool
// Procedural style
mysqli_ping(mysqli $mysql): boolParámetros
$mysql(solo procedimental) — un identificador de enlace de conexión devuelto pormysqli_connect()omysqli_init().
Valor de retorno — true si la conexión está activa (o se reconectó con éxito), false en caso contrario.
Nota de obsolescencia:
mysqli_ping()y la función de reconexión automática están obsoletas desde PHP 8.4 y se eliminarán en versiones futuras, porque las reconexiones silenciosas pueden perder el estado de sesión (tablas temporales, sentencias preparadas, transacciones, variablesSET). El enfoque recomendado es capturar la consulta fallida y abrir una nueva conexión manualmente.
Ejemplo orientado a objetos
<?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();
?>El script inicializa una conexión MySQLi, verifica que tuvo éxito mediante connect_errno, y luego llama a ping() para confirmar que el enlace está activo. Muestra un mensaje de éxito o error a través de connect_error según corresponda.
Nota de seguridad: En entornos de producción, evita codificar las credenciales de la base de datos directamente en el código. Usa variables de entorno o archivos de configuración seguros para almacenar datos sensibles.
Ejemplo procedimental
Para el estilo procedimental, puedes usar mysqli_ping($link) en su lugar:
<?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);
?>Alternativa moderna recomendada
Dado que ping() está obsoleta en PHP 8.4, el patrón duradero es ejecutar la consulta, detectar el fallo "gone away" y reconectar explícitamente:
<?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;
}
}
?>Esto te permite tener el control total del estado de la conexión en lugar de depender de una reconexión silenciosa.
Conclusión
mysqli_ping() es una forma rápida de comprobar si una conexión MySQL sigue activa y, en versiones antiguas de PHP, de reconectar un enlace caído. Es útil en scripts de larga ejecución, pero desde PHP 8.4 está obsoleta — es preferible capturar el fallo de query() y reabrir la conexión manualmente. Para más información sobre cómo establecer conexiones, consulta mysqli_connect() y la descripción general de MySQLi.