get_server_version
Aprenda a usar mysqli_get_server_version() no PHP para obter a versão do servidor MySQL como um inteiro e como decodificá-la.
Neste artigo, vamos nos concentrar na função mysqli_get_server_version() no PHP, que retorna o número de versão do servidor MySQL como um inteiro. Explicaremos como ela funciona, como decodificar o número retornado, quando usá-la em vez da versão baseada em string mysqli_get_server_info(), e as armadilhas comuns a serem observadas.
Introdução à função mysqli_get_server_version()
A função mysqli_get_server_version() é uma função interna do PHP que retorna a versão do servidor MySQL conectado como um único inteiro. Ela recebe um argumento — uma conexão MySQLi aberta — e retorna um número como 80037.
int mysqli_get_server_version(mysqli $mysql)O inteiro é codificado com esta fórmula:
main_version * 10000 + minor_version * 100 + sub_versionPortanto, o MySQL 8.0.37 se torna 8 * 10000 + 0 * 100 + 37 = 80037, e o MySQL 5.7.29 se torna 50729. Como o valor é um inteiro simples, é a forma mais confiável para usar em comparações numéricas — você não precisa analisar uma string como "8.0.37-0ubuntu0.22.04.1".
Como usar a função mysqli_get_server_version()
Chame a função em uma conexão MySQLi válida. Sempre confirme que a conexão foi bem-sucedida primeiro, caso contrário você estaria passando um 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);
?>Aqui abrimos uma conexão com mysqli_connect(), verificamos ela e, em seguida, lemos a versão. A saída para um servidor MySQL 8.0.37 é:
Server version (integer): 80037A função também funciona no estilo orientado a objetos — $mysqli->server_version é a propriedade equivalente à chamada procedural.
Decodificando o número de versão
Como o resultado é codificado, geralmente você quer convertê-lo de volta em uma string MAJOR.MINOR.PATCH legível por humanos. Inverta a fórmula com divisão inteira e o 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}";
?>Isso imprime:
MySQL 8.0.37Quando usá-la (e o que usar em vez disso)
- Use
mysqli_get_server_version()quando precisar comparar versões no código — por exemplo, para habilitar um recurso apenas no MySQL 8.0 ou mais recente. Uma verificação numérica comoif ($mysqli->get_server_version() >= 80000)é mais simples e segura do que analisar uma string. - Use
mysqli_get_server_info()quando quiser a string de versão completa legível por humanos (incluindo sufixos de distribuição) para registro ou exibição. - Use
mysqli_get_client_version()quando precisar da versão da biblioteca cliente MySQL contra a qual o PHP foi compilado, em vez do servidor com o qual está se comunicando.
Armadilhas comuns
- A função retorna a versão do servidor, não do próprio PHP. Para a versão do runtime PHP, use
phpversion()ou a constantePHP_VERSION. - Ela requer uma conexão estabelecida. Se
mysqli_connect()falhar, verifiquemysqli_connect_error()antes de chamar esta função. - O inteiro não tem o mesmo valor que a string de
mysqli_get_server_info(); não compare os dois diretamente.
Conclusão
A função mysqli_get_server_version() fornece uma maneira confiável e numérica de verificar a versão do servidor MySQL. Conhecer a codificação main * 10000 + minor * 100 + sub permite decodificá-la de volta em uma string legível e escrever comparações de versão limpas que mantêm suas aplicações orientadas a banco de dados compatíveis e estáveis.