W3docs

get_server_version

Découvrez la fonction mysqli_get_server_version() en PHP, qui retourne le numéro de version du serveur MySQL sous forme d'entier.

Dans cet article, nous allons nous concentrer sur la fonction mysqli_get_server_version() en PHP, qui retourne le numéro de version du serveur MySQL sous forme d'entier. Nous expliquerons son fonctionnement, comment décoder le nombre qu'elle retourne, quand l'utiliser à la place de la fonction basée sur les chaînes mysqli_get_server_info(), et les pièges courants à éviter.

Introduction à la fonction mysqli_get_server_version()

La fonction mysqli_get_server_version() est une fonction PHP intégrée qui retourne la version du serveur MySQL connecté sous forme d'entier unique. Elle prend un argument — une connexion MySQLi ouverte — et retourne un nombre tel que 80037.

int mysqli_get_server_version(mysqli $mysql)

L'entier est encodé selon cette formule :

main_version * 10000 + minor_version * 100 + sub_version

Ainsi, MySQL 8.0.37 devient 8 * 10000 + 0 * 100 + 37 = 80037, et MySQL 5.7.29 devient 50729. Comme la valeur est un entier simple, c'est la forme la plus fiable pour les comparaisons numériques — il n'est pas nécessaire d'analyser une string comme "8.0.37-0ubuntu0.22.04.1".

Comment utiliser la fonction mysqli_get_server_version()

Appelez la fonction sur une connexion MySQLi valide. Vérifiez toujours que la connexion a réussi en premier, sinon vous passeriez un handle invalide :

<?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);
?>

Ici, nous ouvrons une connexion avec mysqli_connect(), la vérifions, puis lisons la version. La sortie pour un serveur MySQL 8.0.37 est :

Server version (integer): 80037

La fonction fonctionne également en style orienté objet — $mysqli->server_version est la propriété équivalente à l'appel procédural.

Décoder le numéro de version

Comme le résultat est encodé, vous souhaiterez généralement le reconvertir en une string lisible MAJOR.MINOR.PATCH. Inversez la formule avec la division entière et l'opérateur 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}";
?>

Cela affiche :

MySQL 8.0.37

Quand l'utiliser (et quoi utiliser à la place)

  • Utilisez mysqli_get_server_version() lorsque vous avez besoin de comparer des versions dans le code — par exemple, pour activer une fonctionnalité uniquement sur MySQL 8.0 ou supérieur. Une vérification numérique comme if ($mysqli->get_server_version() >= 80000) est plus simple et plus sûre que l'analyse d'une string.
  • Utilisez mysqli_get_server_info() lorsque vous voulez la string de version complète lisible (y compris les suffixes de distribution) pour la journalisation ou l'affichage.
  • Utilisez mysqli_get_client_version() lorsque vous avez besoin de la version de la bibliothèque cliente MySQL avec laquelle PHP a été compilé, plutôt que celle du serveur auquel il se connecte.

Pièges courants

  • La fonction retourne la version du serveur, pas de PHP lui-même. Pour la version du runtime PHP, utilisez phpversion() ou la constante PHP_VERSION.
  • Elle nécessite une connexion établie. Si mysqli_connect() échoue, vérifiez mysqli_connect_error() avant d'appeler cette fonction.
  • L'entier n'est pas la même valeur que la string retournée par mysqli_get_server_info() ; ne les comparez pas directement.

Conclusion

La fonction mysqli_get_server_version() fournit un moyen numérique et fiable de vérifier la version du serveur MySQL. Connaître l'encodage main * 10000 + minor * 100 + sub vous permet de le décoder en une string lisible et d'écrire des comparaisons de versions propres qui maintiennent vos applications pilotées par base de données compatibles et stables.

Pratique

Pratique
Que retourne mysqli_get_server_version() pour un serveur MySQL 8.0.37 ?
Que retourne mysqli_get_server_version() pour un serveur MySQL 8.0.37 ?
Was this page helpful?