Guide complet sur la fonction mysqli_stat en PHP
Découvrez comment utiliser mysqli_stat en PHP pour interroger l'état du serveur MySQL : uptime, threads, requêtes et plus encore.
Lorsque vous travaillez avec des bases de données MySQL en PHP, l'extension mysqli expose de nombreuses fonctions pour communiquer avec le serveur. mysqli_stat est la plus simple pour les contrôles de santé : elle demande au serveur MySQL une seule ligne d'état en direct — le temps de fonctionnement, le nombre de requêtes exécutées, le nombre de threads ouverts, et ainsi de suite.
Ce guide explique ce que retourne mysqli_stat, comment l'appeler aussi bien en style procédural qu'orienté objet, comment transformer sa sortie brute en nombres exploitables, et les pièges courants à surveiller.
mysqli_statn'est pas la fonction systèmestat()pour les fichiers. Si vous recherchez des métadonnées de fichier (taille, permissions, inode), consultez plutôt stat en PHP et fstat.
Ce que fait mysqli_stat
mysqli_stat est une fonction intégrée qui retourne l'état actuel du serveur MySQL sous forme d'une chaîne unique séparée par des espaces. C'est l'équivalent PHP de l'exécution de mysqladmin status en ligne de commande — un instantané rapide, pas un relevé complet des performances.
Une valeur de retour typique ressemble à ceci :
Uptime: 272701 Threads: 1 Questions: 18 Slow queries: 0 Opens: 17 Flush tables: 1 Open tables: 5 Queries per second avg: 0.000Les champs signifient :
| Champ | Signification |
|---|---|
Uptime | Secondes depuis le démarrage du serveur |
Threads | Connexions clients actuellement ouvertes |
Questions | Instructions exécutées depuis le démarrage |
Slow queries | Requêtes ayant dépassé long_query_time |
Opens | Tables que le serveur a ouvertes |
Open tables | Tables actuellement ouvertes |
Queries per second avg | Débit moyen des requêtes |
Syntaxe
// Procedural style
mysqli_stat(mysqli $connection): string|false
// Object-oriented style
$connection->stat(): string|falseElle prend le lien de connexion retourné par mysqli_connect (procédural) ou un objet mysqli (POO), et retourne la chaîne d'état en cas de succès ou false en cas d'échec (par exemple, lorsque la connexion a été perdue).
Utilisation de base
Style procédural
Connectez-vous d'abord, puis lisez l'état. Traitez toujours un retour false comme une erreur.
<?php
$connection = mysqli_connect('localhost', 'username', 'password', 'mydatabase');
if (!$connection) {
die('Connection failed: ' . mysqli_connect_error());
}
$status = mysqli_stat($connection);
if ($status === false) {
echo 'Error: ' . mysqli_error($connection);
} else {
echo $status;
}Style orienté objet
Le même appel sous forme de méthode sur l'objet mysqli :
<?php
$mysqli = new mysqli('localhost', 'username', 'password', 'mydatabase');
if ($mysqli->connect_errno) {
die('Connection failed: ' . $mysqli->connect_error);
}
echo $mysqli->stat();Analyser l'état en nombres
La chaîne brute convient bien pour la journalisation, mais pour la surveillance vous souhaitez généralement des valeurs individuelles. Chaque champ est Nom: valeur, séparé par deux espaces, donc vous pouvez le diviser en une map clé/valeur :
<?php
function parseMysqlStat(string $status): array
{
$result = [];
foreach (explode(' ', $status) as $pair) {
// Each pair looks like "Uptime: 272701"
[$key, $value] = array_map('trim', explode(':', $pair, 2));
$result[$key] = $value;
}
return $result;
}
$status = 'Uptime: 272701 Threads: 1 Questions: 18 Slow queries: 0 Opens: 17 Flush tables: 1 Open tables: 5 Queries per second avg: 0.000';
$stats = parseMysqlStat($status);
echo 'Uptime in seconds: ' . $stats['Uptime'] . PHP_EOL;
echo 'Active threads: ' . $stats['Threads'] . PHP_EOL;
echo 'Slow queries: ' . $stats['Slow queries'] . PHP_EOL;Sortie :
Uptime in seconds: 272701
Active threads: 1
Slow queries: 0Maintenant $stats['Uptime'] et $stats['Slow queries'] sont faciles à seuiller, à alerter ou à représenter graphiquement.
Cas d'utilisation courants
- Vérification de disponibilité. Appelez
mysqli_statdans un endpoint de contrôle de santé ; si elle retournefalse, la base de données est inaccessible. - Surveillance légère. Échantillonnez
ThreadsetQueries per second avgà intervalles réguliers pour repérer les pics de charge. - Détection des requêtes lentes. Un
Slow queriesen augmentation est un signal précoce qu'un index manque.
Pièges courants
- Elle retourne une chaîne, pas un tableau.
var_dumpsur le résultat affiche une chaîne unique. Analysez-la vous-même (voir ci-dessus) avant de faire des calculs sur les valeurs. - Vérifiez
false, pas une chaîne vide. Sur une connexion perdue, la fonction retourne le booléenfalse. Utilisez une comparaison stricte (=== false) pour ne pas le confondre avec une chaîne vide. - C'est un instantané, pas un historique. Des valeurs comme
Questionssont cumulatives depuis le démarrage du serveur ; pour mesurer un taux, vous devez échantillonner deux fois et soustraire. - Nécessite une connexion valide. Si la connexion a échoué, appeler
mysqli_statdessus provoquera un avertissement ou une erreur. Vérifiez toujours la connexion en premier — voir mysqli_connect_error.
Fonctions associées
- mysqli_connect — ouvrir la connexion dont
mysqli_stata besoin. - mysqli_get_server_info — la chaîne de version du serveur.
- mysqli_ping — vérifier (et éventuellement reconnecter) une connexion.
Conclusion
mysqli_stat est un outil petit mais pratique pour surveiller un serveur MySQL depuis PHP. Elle retourne une chaîne d'état unique avec des métriques d'uptime, de threads et de requêtes. Vérifiez le résultat contre false pour détecter une connexion morte, et analysez la chaîne en map clé/valeur lorsque vous avez besoin des valeurs individuelles pour des contrôles de santé ou des tableaux de bord.