W3docs

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_version

Quindi 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): 80037

La 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.37

Quando 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 come if ($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 costante PHP_VERSION.
  • Richiede una connessione stabilita. Se mysqli_connect() fallisce, controlla mysqli_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.

Esercitazione

Pratica
Cosa restituisce mysqli_get_server_version() per un server MySQL 8.0.37?
Cosa restituisce mysqli_get_server_version() per un server MySQL 8.0.37?
Was this page helpful?