get_server_version
Erfahren Sie, wie mysqli_get_server_version() in PHP die MySQL-Serverversion als Integer zurückgibt und wie Sie den Wert dekodieren.
In diesem Artikel befassen wir uns mit der Funktion mysqli_get_server_version() in PHP, die die Versionsnummer des MySQL-Servers als Integer zurückgibt. Wir erklären, wie sie funktioniert, wie man die zurückgegebene Zahl dekodiert, wann man sie anstelle der string-basierten mysqli_get_server_info() verwenden sollte, und welche häufigen Fallstricke es zu beachten gilt.
Einführung in die Funktion mysqli_get_server_version()
Die Funktion mysqli_get_server_version() ist eine eingebaute PHP-Funktion, die die Version des verbundenen MySQL-Servers als einzelnen Integer zurückgibt. Sie nimmt ein Argument entgegen — eine offene MySQLi-Verbindung — und gibt eine Zahl wie 80037 zurück.
int mysqli_get_server_version(mysqli $mysql)Der Integer wird mit dieser Formel kodiert:
main_version * 10000 + minor_version * 100 + sub_versionMySQL 8.0.37 wird also zu 8 * 10000 + 0 * 100 + 37 = 80037, und MySQL 5.7.29 wird zu 50729. Da es sich um einen einfachen Integer handelt, ist er die zuverlässigste Form für numerische Vergleiche — man muss keinen string wie "8.0.37-0ubuntu0.22.04.1" parsen.
Verwendung der Funktion mysqli_get_server_version()
Rufen Sie die Funktion mit einer gültigen MySQLi-Verbindung auf. Prüfen Sie stets zuerst, ob die Verbindung erfolgreich war, da sonst ein ungültiges Handle übergeben würde:
<?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);
?>Hier öffnen wir eine Verbindung mit mysqli_connect(), verifizieren sie und lesen dann die Version aus. Die Ausgabe für einen MySQL-8.0.37-Server lautet:
Server version (integer): 80037Die Funktion funktioniert auch im objektorientierten Stil — $mysqli->server_version ist das Property-Äquivalent des prozeduralen Aufrufs.
Den Versionsnummer dekodieren
Da das Ergebnis kodiert ist, möchte man es in der Regel in einen lesbaren MAJOR.MINOR.PATCH-string zurückwandeln. Kehren Sie die Formel mit ganzzahliger Division und dem Modulo-Operator um:
<?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}";
?>Dies gibt aus:
MySQL 8.0.37Wann man sie verwenden sollte (und was man stattdessen benutzt)
- Verwenden Sie
mysqli_get_server_version(), wenn Sie Versionen im Code vergleichen müssen — zum Beispiel, um eine Funktion nur auf MySQL 8.0 oder neuer zu aktivieren. Eine numerische Prüfung wieif ($mysqli->get_server_version() >= 80000)ist einfacher und sicherer als das Parsen eines strings. - Verwenden Sie
mysqli_get_server_info(), wenn Sie den vollständigen lesbaren Versions-string (einschließlich Distributionssuffixen) für Protokollierung oder Anzeige benötigen. - Verwenden Sie
mysqli_get_client_version(), wenn Sie die Version der MySQL-Client-Bibliothek benötigen, gegen die PHP kompiliert wurde, und nicht die des Servers, mit dem es kommuniziert.
Häufige Fallstricke
- Die Funktion gibt die Version des Servers zurück, nicht von PHP selbst. Für die PHP-Laufzeitversion verwenden Sie
phpversion()oder die KonstantePHP_VERSION. - Sie erfordert eine bestehende Verbindung. Wenn
mysqli_connect()fehlschlägt, prüfen Siemysqli_connect_error(), bevor Sie diese Funktion aufrufen. - Der Integer ist nicht derselbe Wert wie der string von
mysqli_get_server_info(); vergleichen Sie die beiden nicht direkt miteinander.
Fazit
Die Funktion mysqli_get_server_version() bietet eine zuverlässige, numerische Möglichkeit, die MySQL-Serverversion zu prüfen. Die Kenntnis der Kodierung main * 10000 + minor * 100 + sub ermöglicht es Ihnen, den Wert in einen lesbaren string zurückzuwandeln und saubere Versionsvergleiche zu schreiben, die Ihre datenbankbasierten Anwendungen kompatibel und stabil halten.