W3docs

ping

Découvrez la fonction mysqli_ping() en PHP pour vérifier si une connexion au serveur MySQL est active et gérer les reconnexions.

Cet article présente la fonction mysqli_ping() en PHP, qui vérifie si une connexion au serveur MySQL est toujours active et, lorsque cela est pris en charge, reconnecte automatiquement un lien interrompu. Vous verrez la syntaxe orientée objet et procédurale, la signature de la fonction, les cas d'utilisation, ainsi que la dépréciation importante dans PHP 8.4.

Ce que fait mysqli_ping()

mysqli_ping() envoie un ping à une connexion MySQL active. Si la connexion est active, elle retourne true. Si le lien est interrompu, la fonction tente de se reconnecter lorsque la directive de configuration mysqli.reconnect est activée, et retourne true en cas de reconnexion réussie ou false si elle ne peut pas être rétablie.

Elle est particulièrement utile pour les scripts de longue durée (workers, daemons, consommateurs de files d'attente) où une connexion peut rester inactive assez longtemps pour que le serveur la ferme après wait_timeout secondes — l'erreur classique « MySQL server has gone away ». Envoyer un ping avant une requête permet de détecter ou de récupérer de cette situation.

Syntaxe

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

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

Paramètres

  • $mysql (style procédural uniquement) — un identifiant de lien de connexion retourné par mysqli_connect() ou mysqli_init().

Valeur de retourtrue si la connexion est active (ou a été reconnectée avec succès), false sinon.

Note de dépréciation : mysqli_ping() et la fonctionnalité de reconnexion automatique sont dépréciées depuis PHP 8.4 et supprimées dans les versions futures, car les reconnexions silencieuses peuvent perdre l'état de la session (tables temporaires, instructions préparées, transactions, variables SET). L'approche recommandée est d'intercepter la requête échouée et d'ouvrir vous-même une nouvelle connexion.

Exemple orienté objet

<?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();
?>

Le script initialise une connexion MySQLi, vérifie qu'elle a réussi via connect_errno, puis appelle ping() pour confirmer que le lien est actif. Il affiche un message de succès ou d'erreur via connect_error en conséquence.

Note de sécurité : Dans les environnements de production, évitez de coder en dur les identifiants de base de données. Utilisez des variables d'environnement ou des fichiers de configuration sécurisés pour stocker les données sensibles.

Exemple procédural

Pour le style procédural, vous pouvez utiliser mysqli_ping($link) à la place :

<?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);
?>

Alternative moderne recommandée

Étant donné que ping() est dépréciée dans PHP 8.4, le modèle durable consiste à exécuter votre requête, détecter l'échec « gone away » et se reconnecter explicitement :

<?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;
    }
}
?>

Cela vous donne un contrôle total sur l'état de la connexion au lieu de vous fier à une reconnexion silencieuse.

Conclusion

mysqli_ping() est un moyen rapide de vérifier si une connexion MySQL est toujours active et, sur les anciennes versions de PHP, de reconnecter un lien interrompu. Elle est pratique dans les scripts de longue durée, mais depuis PHP 8.4 elle est dépréciée — préférez intercepter l'échec de query() et rouvrir vous-même la connexion. Pour en savoir plus sur l'établissement de connexions, consultez mysqli_connect() et la vue d'ensemble MySQLi.

Pratique

Pratique
Quel est le but d'un ping en PHP ?
Quel est le but d'un ping en PHP ?
Was this page helpful?