W3docs

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_version

MySQL 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): 80037

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

Wann 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 wie if ($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 Konstante PHP_VERSION.
  • Sie erfordert eine bestehende Verbindung. Wenn mysqli_connect() fehlschlägt, prüfen Sie mysqli_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.

Übungen

Übung
Was gibt mysqli_get_server_version() für einen MySQL-8.0.37-Server zurück?
Was gibt mysqli_get_server_version() für einen MySQL-8.0.37-Server zurück?
Was this page helpful?