get_server_version
In questo articolo approfondiamo la funzione mysqli_get_server_version() in PHP, usata per restituire il numero di versione del server MySQL come intero.
In questo articolo approfondiamo la funzione mysqli_get_server_version() in PHP, che restituisce il numero di versione del server MySQL come integer. Spiegheremo come funziona, come decodificare il numero restituito, quando usarla al posto della versione basata su string mysqli_get_server_info(), e i problemi comuni a cui prestare attenzione.
Introduzione alla funzione mysqli_get_server_version()
La funzione mysqli_get_server_version() è una funzione built-in di PHP che restituisce la versione del server MySQL connesso come un singolo integer. Accetta un argomento — una connessione MySQLi aperta — e restituisce un numero come 80037.
int mysqli_get_server_version(mysqli $mysql)L'integer è codificato con questa formula:
main_version * 10000 + minor_version * 100 + sub_versionQuindi MySQL 8.0.37 diventa 8 * 10000 + 0 * 100 + 37 = 80037, e MySQL 5.7.29 diventa 50729. Poiché il valore è un integer semplice, è la forma più affidabile da usare nei confronti numerici — non è necessario analizzare una string come "8.0.37-0ubuntu0.22.04.1".
Come usare la funzione mysqli_get_server_version()
Chiama la funzione su una connessione MySQLi valida. Verifica sempre prima che la connessione sia riuscita, altrimenti passeresti un handle non valido:
<?php
$mysqli = mysqli_connect("localhost", "username", "password", "database");
if (!$mysqli) {
die("Connection failed: " . mysqli_connect_error());
}
$server_version = mysqli_get_server_version($mysqli);
echo "Server version (integer): " . $server_version;
mysqli_close($mysqli);
?>Qui apriamo una connessione con mysqli_connect(), la verifichiamo, poi leggiamo la versione. L'output per un server MySQL 8.0.37 è:
Server version (integer): 80037La funzione funziona anche in stile orientato agli oggetti — $mysqli->server_version è la proprietà equivalente alla chiamata procedurale.
Decodificare il numero di versione
Poiché il risultato è codificato, di solito si vorrà convertirlo di nuovo in una string leggibile MAJOR.MINOR.PATCH. Inverti la formula con la divisione intera e l'operatore modulo:
<?php
$version = 80037; // value returned by mysqli_get_server_version()
$major = intdiv($version, 10000);
$minor = intdiv($version % 10000, 100);
$patch = $version % 100;
echo "MySQL {$major}.{$minor}.{$patch}";
?>Questo stampa:
MySQL 8.0.37Quando usarla (e quale alternativa usare)
- Usa
mysqli_get_server_version()quando devi confrontare versioni nel codice — ad esempio, per abilitare una funzionalità solo su MySQL 8.0 o superiore. Un confronto numerico comeif ($mysqli->get_server_version() >= 80000)è più semplice e sicuro dell'analisi di una string. - Usa
mysqli_get_server_info()quando vuoi la string della versione completa e leggibile (inclusi i suffissi di distribuzione) per il logging o la visualizzazione. - Usa
mysqli_get_client_version()quando hai bisogno della versione della libreria client MySQL con cui PHP è stato compilato, anziché del server con cui sta comunicando.
Problemi comuni
- La funzione restituisce la versione del server, non di PHP stesso. Per la versione del runtime PHP, usa
phpversion()o la costantePHP_VERSION. - Richiede una connessione stabilita. Se
mysqli_connect()fallisce, controllamysqli_connect_error()prima di chiamare questa funzione. - L'integer non è lo stesso valore della string restituita da
mysqli_get_server_info(); non confrontare i due direttamente.
Conclusione
La funzione mysqli_get_server_version() fornisce un modo affidabile e numerico per verificare la versione del server MySQL. Conoscere la codifica main * 10000 + minor * 100 + sub ti permette di decodificarla in una string leggibile e di scrivere confronti di versione puliti che mantengono le tue applicazioni database-driven compatibili e stabili.