Guida Completa alla Funzione mysqli_stat in PHP
Scopri come usare mysqli_stat in PHP per ottenere lo stato del server MySQL, analizzare l'output e gestire gli errori di connessione.
Quando si lavora con i database MySQL in PHP, l'estensione mysqli espone molte funzioni per comunicare con il server. mysqli_stat è quella più semplice per i controlli di salute: interroga il server MySQL per ottenere una singola riga di stato in tempo reale — tempo di attività, numero di query eseguite, thread aperti e così via.
Questa guida spiega cosa restituisce mysqli_stat, come chiamarla sia nello stile procedurale che in quello orientato agli oggetti, come trasformare il suo output grezzo in numeri utilizzabili e i problemi comuni a cui prestare attenzione.
mysqli_statnon è la funzione di filesystemstat(). Se stai cercando metadati di file (dimensione, permessi, inode), consulta stat in PHP e fstat.
Cosa fa mysqli_stat
mysqli_stat è una funzione integrata che restituisce lo stato attuale del server MySQL come una stringa separata da spazi. È l'equivalente PHP dell'esecuzione di mysqladmin status dalla riga di comando — un'istantanea rapida, non un dump completo delle prestazioni.
Un valore di ritorno tipico appare così:
Uptime: 272701 Threads: 1 Questions: 18 Slow queries: 0 Opens: 17 Flush tables: 1 Open tables: 5 Queries per second avg: 0.000I campi significano:
| Campo | Significato |
|---|---|
Uptime | Secondi in cui il server è stato in esecuzione |
Threads | Connessioni client attualmente aperte |
Questions | Istruzioni eseguite dall'avvio |
Slow queries | Query che hanno superato long_query_time |
Opens | Tabelle aperte dal server |
Open tables | Tabelle attualmente aperte |
Queries per second avg | Throughput medio delle query |
Sintassi
// Procedural style
mysqli_stat(mysqli $connection): string|false
// Object-oriented style
$connection->stat(): string|falseAccetta il collegamento restituito da mysqli_connect (procedurale) o un oggetto mysqli (OOP), e restituisce la stringa di stato in caso di successo oppure false in caso di errore (ad esempio quando la connessione è stata persa).
Utilizzo di base
Stile procedurale
Prima connettiti, poi leggi lo stato. Tratta sempre un ritorno false come un errore.
<?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;
}Stile orientato agli oggetti
La stessa chiamata come metodo sull'oggetto mysqli:
<?php
$mysqli = new mysqli('localhost', 'username', 'password', 'mydatabase');
if ($mysqli->connect_errno) {
die('Connection failed: ' . $mysqli->connect_error);
}
echo $mysqli->stat();Analisi dello stato in numeri
La stringa grezza va bene per il logging, ma per il monitoraggio di solito si vogliono i valori singoli. Ogni campo è Nome: valore, separato da due spazi, quindi puoi suddividerlo in una mappa chiave/valore:
<?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;Output:
Uptime in seconds: 272701
Active threads: 1
Slow queries: 0Ora $stats['Uptime'] e $stats['Slow queries'] sono facili da sogliare, usare per avvisi o grafici.
Casi d'uso comuni
- Controllo di attività. Chiama
mysqli_statin un endpoint di health check; se restituiscefalse, il database non è raggiungibile. - Monitoraggio leggero. Campiona
ThreadseQueries per second avgperiodicamente per individuare picchi di carico. - Individuare query lente. Un conteggio crescente di
Slow queriesè un segnale precoce che manca un indice.
Problemi comuni
- Restituisce una stringa, non un array.
var_dumpsul risultato mostra una singola stringa. Analizzala manualmente (vedi sopra) prima di fare calcoli sui valori. - Controlla
false, non la stringa vuota. Su una connessione interrotta la funzione restituisce il booleanfalse. Usa un confronto rigoroso (=== false) per non confonderlo con una stringa vuota. - È un'istantanea, non uno storico. Valori come
Questionssono cumulativi dall'avvio del server; per misurare la velocità devi campionare due volte e sottrarre. - Richiede una connessione valida. Se la connessione non è riuscita, chiamare
mysqli_statsu di essa produrrà avvisi o errori. Verifica sempre la connessione prima — vedi mysqli_connect_error.
Funzioni correlate
- mysqli_connect — apri la connessione necessaria a
mysqli_stat. - mysqli_get_server_info — la stringa della versione del server.
- mysqli_ping — controlla (e opzionalmente riconnette) una connessione.
Conclusione
mysqli_stat è uno strumento piccolo ma pratico per monitorare un server MySQL da PHP. Restituisce una singola stringa di stato con metriche di uptime, thread e query. Confronta il risultato con false per rilevare una connessione interrotta, e analizza la stringa in una mappa chiave/valore quando hai bisogno dei singoli numeri per health check o dashboard.