W3docs

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_version

Así, 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): 80037

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

Cuá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 como if ($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 constante PHP_VERSION.
  • Requiere una conexión establecida. Si mysqli_connect() falla, comprueba mysqli_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.

Práctica

Práctica
¿Qué devuelve mysqli_get_server_version() para un servidor MySQL 8.0.37?
¿Qué devuelve mysqli_get_server_version() para un servidor MySQL 8.0.37?
Was this page helpful?