W3docs

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_version

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

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

Quando 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 como if ($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 constante PHP_VERSION.
  • Ela requer uma conexão estabelecida. Se mysqli_connect() falhar, verifique mysqli_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.

Prática

Prática
O que mysqli_get_server_version() retorna para um servidor MySQL 8.0.37?
O que mysqli_get_server_version() retorna para um servidor MySQL 8.0.37?
Was this page helpful?