get_server_version
В этой статье рассматривается функция mysqli_get_server_version() в PHP, которая возвращает номер версии MySQL-сервера в виде целого числа.
В этой статье мы рассмотрим функцию mysqli_get_server_version() в PHP, которая возвращает номер версии MySQL-сервера в виде целого числа (integer). Мы объясним, как она работает, как декодировать возвращаемое число, когда использовать её вместо строковой mysqli_get_server_info(), а также на какие типичные ошибки стоит обращать внимание.
Введение в функцию mysqli_get_server_version()
Функция mysqli_get_server_version() — это встроенная функция PHP, которая возвращает версию подключённого MySQL-сервера в виде одного целого числа. Она принимает один аргумент — открытое соединение MySQLi — и возвращает число, например 80037.
int mysqli_get_server_version(mysqli $mysql)Целое число кодируется по следующей формуле:
main_version * 10000 + minor_version * 100 + sub_versionТаким образом, MySQL 8.0.37 преобразуется в 8 * 10000 + 0 * 100 + 37 = 80037, а MySQL 5.7.29 — в 50729. Поскольку значение является обычным целым числом, оно наиболее надёжно для использования в числовых сравнениях — вам не нужно разбирать string вроде "8.0.37-0ubuntu0.22.04.1".
Как использовать функцию mysqli_get_server_version()
Вызовите функцию для действующего соединения MySQLi. Всегда сначала убедитесь, что соединение установлено успешно, иначе вы передадите недопустимый дескриптор:
<?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);
?>Здесь мы открываем соединение с помощью mysqli_connect(), проверяем его, затем считываем версию. Для сервера MySQL 8.0.37 вывод будет следующим:
Server version (integer): 80037Функция также работает в объектно-ориентированном стиле — $mysqli->server_version является эквивалентом процедурного вызова в виде свойства.
Декодирование номера версии
Поскольку результат закодирован, зачастую нужно преобразовать его обратно в читаемую строку MAJOR.MINOR.PATCH. Обратите формулу с помощью целочисленного деления и оператора остатка от деления:
<?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}";
?>Это выведет:
MySQL 8.0.37Когда использовать (и что использовать вместо)
- Используйте
mysqli_get_server_version(), когда нужно сравнивать версии в коде — например, чтобы включить функцию только на MySQL 8.0 и новее. Числовая проверка видаif ($mysqli->get_server_version() >= 80000)проще и безопаснее, чем разбор строки. - Используйте
mysqli_get_server_info(), когда нужна полная читаемая версия в виде строки (string) (включая суффиксы дистрибутива) для журналирования или отображения. - Используйте
mysqli_get_client_version(), когда нужна версия клиентской библиотеки MySQL, с которой скомпилирован PHP, а не версия сервера, с которым он взаимодействует.
Типичные ошибки
- Функция возвращает версию сервера, а не самого PHP. Для получения версии PHP-среды выполнения используйте
phpversion()или константуPHP_VERSION. - Для работы функции требуется установленное соединение. Если
mysqli_connect()завершился ошибкой, перед вызовом этой функции проверьтеmysqli_connect_error(). - Целое число не совпадает со значением строки, возвращаемой
mysqli_get_server_info(); не сравнивайте их напрямую.
Заключение
Функция mysqli_get_server_version() обеспечивает надёжный числовой способ проверки версии MySQL-сервера. Знание кодировки main * 10000 + minor * 100 + sub позволяет декодировать её обратно в читаемую строку и писать чистые сравнения версий, обеспечивающие совместимость и стабильность приложений, работающих с базами данных.