Guía completa sobre la función mysqli_stat en PHP
Aprende a usar mysqli_stat en PHP para obtener el estado del servidor MySQL, analizar el resultado y monitorear conexiones y consultas.
Cuando trabajas con bases de datos MySQL en PHP, la extensión mysqli expone muchas funciones para comunicarse con el servidor. mysqli_stat es la más sencilla para comprobaciones de estado: le pregunta al servidor MySQL por una sola línea de estado en tiempo real — tiempo de actividad, cuántas consultas ha ejecutado, cuántos hilos están abiertos, etc.
Esta guía explica qué devuelve mysqli_stat, cómo llamarla tanto en estilo procedural como orientado a objetos, cómo convertir su salida sin procesar en números utilizables y los errores comunes que debes vigilar.
mysqli_statno es la funciónstat()del sistema de archivos. Si buscas metadatos de archivos (tamaño, permisos, inodo), consulta stat en PHP y fstat en su lugar.
Qué hace mysqli_stat
mysqli_stat es una función integrada que devuelve el estado actual del servidor MySQL como una cadena separada por espacios. Es el equivalente en PHP de ejecutar mysqladmin status en la línea de comandos — una instantánea rápida, no un volcado completo de rendimiento.
Un valor de retorno típico tiene este aspecto:
Uptime: 272701 Threads: 1 Questions: 18 Slow queries: 0 Opens: 17 Flush tables: 1 Open tables: 5 Queries per second avg: 0.000Los campos significan:
| Campo | Significado |
|---|---|
Uptime | Segundos que lleva en ejecución el servidor |
Threads | Conexiones de cliente actualmente abiertas |
Questions | Sentencias ejecutadas desde el inicio |
Slow queries | Consultas que superaron long_query_time |
Opens | Tablas que el servidor ha abierto |
Open tables | Tablas actualmente abiertas |
Queries per second avg | Rendimiento medio de consultas |
Sintaxis
// Procedural style
mysqli_stat(mysqli $connection): string|false
// Object-oriented style
$connection->stat(): string|falseRecibe el enlace de conexión devuelto por mysqli_connect (procedural) o un objeto mysqli (OOP), y devuelve la cadena de estado en caso de éxito o false en caso de error (por ejemplo, cuando se ha perdido la conexión).
Uso básico
Estilo procedural
Primero conéctate y luego lee el estado. Trata siempre un retorno false como un error.
<?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;
}Estilo orientado a objetos
La misma llamada como método en el objeto mysqli:
<?php
$mysqli = new mysqli('localhost', 'username', 'password', 'mydatabase');
if ($mysqli->connect_errno) {
die('Connection failed: ' . $mysqli->connect_error);
}
echo $mysqli->stat();Análisis del estado en números
La cadena sin procesar está bien para el registro, pero para la monitorización normalmente quieres valores individuales. Cada campo es Name: value, separado por dos espacios, por lo que puedes dividirlo en un mapa clave/valor:
<?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;Salida:
Uptime in seconds: 272701
Active threads: 1
Slow queries: 0Ahora $stats['Uptime'] y $stats['Slow queries'] son fáciles de comparar con umbrales, configurar alertas o representar en gráficas.
Casos de uso comunes
- Comprobación de actividad. Llama a
mysqli_staten un endpoint de verificación de salud; si devuelvefalse, la base de datos es inaccesible. - Monitorización ligera. Muestrea
ThreadsyQueries per second avgperiódicamente para detectar picos de carga. - Detección de consultas lentas. Un incremento en el recuento de
Slow querieses una señal temprana de que falta un índice.
Errores comunes
- Devuelve una cadena, no un array.
var_dumpdel resultado muestra una única cadena. Analízala tú mismo (ver arriba) antes de realizar operaciones matemáticas con los valores. - Comprueba
false, no vacío. En una conexión perdida, la función devuelve el booleanofalse. Usa una comparación estricta (=== false) para no confundirla con una cadena vacía. - Es una instantánea, no un historial. Valores como
Questionsson acumulativos desde el inicio del servidor; para medir la tasa debes tomar dos muestras y restar. - Necesita una conexión válida. Si la conexión falló, llamar a
mysqli_statsobre ella generará advertencias o errores. Verifica siempre la conexión primero — consulta mysqli_connect_error.
Funciones relacionadas
- mysqli_connect — abre la conexión que necesita
mysqli_stat. - mysqli_get_server_info — la cadena de versión del servidor.
- mysqli_ping — comprueba (y opcionalmente reconecta) una conexión.
Conclusión
mysqli_stat es una herramienta pequeña pero práctica para monitorizar un servidor MySQL desde PHP. Devuelve una única cadena de estado con métricas de tiempo de actividad, hilos y consultas. Compara el resultado contra false para detectar una conexión caída, y analiza la cadena en un mapa clave/valor cuando necesites los números individuales para comprobaciones de salud o paneles de control.