get_server_version
Aprende a usar mysqli_get_server_version() en PHP para obtener la versión del servidor MySQL como un entero y cómo decodificarla.
En este artículo nos centraremos en la función mysqli_get_server_version() de PHP, que devuelve el número de versión del servidor MySQL como un entero. Explicaremos cómo funciona, cómo decodificar el número que devuelve, cuándo usarla en lugar de la alternativa basada en string mysqli_get_server_info(), y los errores comunes que hay que tener en cuenta.
Introducción a la función mysqli_get_server_version()
La función mysqli_get_server_version() es una función integrada de PHP que devuelve la versión del servidor MySQL conectado como un único entero. Acepta un argumento — una conexión MySQLi abierta — y devuelve un número como 80037.
int mysqli_get_server_version(mysqli $mysql)El entero se codifica con esta fórmula:
main_version * 10000 + minor_version * 100 + sub_versionAsí, MySQL 8.0.37 se convierte en 8 * 10000 + 0 * 100 + 37 = 80037, y MySQL 5.7.29 se convierte en 50729. Al ser un entero simple, es la forma más fiable para usar en comparaciones numéricas — no es necesario analizar un string como "8.0.37-0ubuntu0.22.04.1".
Cómo usar la función mysqli_get_server_version()
Llama a la función sobre una conexión MySQLi válida. Confirma siempre que la conexión fue exitosa antes, de lo contrario estarías pasando un identificador inválido:
<?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);
?>Aquí abrimos una conexión con mysqli_connect(), la verificamos y luego leemos la versión. La salida para un servidor MySQL 8.0.37 es:
Server version (integer): 80037La función también funciona en estilo orientado a objetos — $mysqli->server_version es la propiedad equivalente de la llamada procedimental.
Decodificar el número de versión
Dado que el resultado está codificado, normalmente querrás convertirlo de nuevo a un string legible MAJOR.MINOR.PATCH. Invierte la fórmula con división entera y el operador módulo:
<?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}";
?>Esto imprime:
MySQL 8.0.37Cuándo usarla (y qué usar en su lugar)
- Usa
mysqli_get_server_version()cuando necesites comparar versiones en el código — por ejemplo, para habilitar una funcionalidad solo en MySQL 8.0 o superior. Una comprobación numérica comoif ($mysqli->get_server_version() >= 80000)es más sencilla y segura que analizar un string. - Usa
mysqli_get_server_info()cuando quieras el string de versión completo y legible (incluyendo sufijos de distribución) para registro o visualización. - Usa
mysqli_get_client_version()cuando necesites la versión de la biblioteca cliente de MySQL con la que se compiló PHP, en lugar del servidor con el que está comunicándose.
Errores comunes
- La función devuelve la versión del servidor, no de PHP en sí. Para la versión del runtime de PHP, usa
phpversion()o la constantePHP_VERSION. - Requiere una conexión establecida. Si
mysqli_connect()falla, compruebamysqli_connect_error()antes de llamar a esta función. - El entero no es el mismo valor que el string de
mysqli_get_server_info(); no los compares directamente.
Conclusión
La función mysqli_get_server_version() proporciona una forma numérica y fiable de comprobar la versión del servidor MySQL. Conocer la codificación main * 10000 + minor * 100 + sub te permite decodificarla de nuevo en un string legible y escribir comparaciones de versión limpias que mantienen tus aplicaciones basadas en bases de datos compatibles y estables.