W3docs

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_stat n'est pas la fonction système stat() 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.000

Les champs signifient :

ChampSignification
UptimeSecondes depuis le démarrage du serveur
ThreadsConnexions clients actuellement ouvertes
QuestionsInstructions exécutées depuis le démarrage
Slow queriesRequêtes ayant dépassé long_query_time
OpensTables que le serveur a ouvertes
Open tablesTables actuellement ouvertes
Queries per second avgDébit moyen des requêtes

Syntaxe

// Procedural style
mysqli_stat(mysqli $connection): string|false

// Object-oriented style
$connection->stat(): string|false

Elle 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: 0

Maintenant $stats['Uptime'] et $stats['Slow queries'] sont faciles à seuiller, à alerter ou à représenter graphiquement.

Cas d'utilisation courants

  • Vérification de disponibilité. Appelez mysqli_stat dans un endpoint de contrôle de santé ; si elle retourne false, la base de données est inaccessible.
  • Surveillance légère. Échantillonnez Threads et Queries per second avg à intervalles réguliers pour repérer les pics de charge.
  • Détection des requêtes lentes. Un Slow queries en augmentation est un signal précoce qu'un index manque.

Pièges courants

  • Elle retourne une chaîne, pas un tableau. var_dump sur 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éen false. 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 Questions sont 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_stat dessus provoquera un avertissement ou une erreur. Vérifiez toujours la connexion en premier — voir mysqli_connect_error.

Fonctions associées

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.

Pratique

Pratique
Que retourne mysqli_stat() en PHP ?
Que retourne mysqli_stat() en PHP ?
Was this page helpful?