OUJOOD.COM
À quoi servent ces fonctions ?
PHP Version : PHP 5.0+ (compatible PHP 7.x, PHP 8.0 à 8.4) — voir avertissements PHP 8.1+ ci-dessous
mysqli_get_client_info() retourne une chaîne identifiant le driver MySQL compilé avec PHP. Depuis PHP 8.2, ce driver est toujours mysqlnd (MySQL Native Driver) — le support de l'ancienne libmysqlclient a été définitivement retiré.
Concrètement, cette fonction sert dans deux situations : vérifier qu'un driver suffisamment récent est présent avant de déployer une application, ou tracer la version dans des logs pour reproduire un bug lié à l'environnement.
Client ≠ serveur : cette fonction retourne la version du driver côté PHP, pas celle du serveur MySQL distant. Pour interroger le serveur, utilisez mysqli_get_server_info() ou $mysqli->server_info. Les deux peuvent différer sans que cela pose de problème, sauf si vous comptez sur des fonctionnalités introduites dans une version spécifique.
⚠️ Dépréciations depuis PHP 8.1
Deux usages sont dépréciés depuis PHP 8.1 et émettent une notice — ils seront supprimés dans PHP 9.0 :
- La méthode
$mysqli->get_client_info()(style orienté objet) est dépréciée. Remplacez-la par la propriété$mysqli->client_info. - Passer une connexion en paramètre —
mysqli_get_client_info($connexion)— est également déprécié. Appelez la fonction sans argument :mysqli_get_client_info().
La valeur retournée est identique dans les deux cas — c'est uniquement la syntaxe qui change.
Syntaxes recommandées en 2026
Orientée objet — propriété client_info
La propriété $mysqli->client_info remplace la méthode dépréciée get_client_info(). Elle retourne exactement la même valeur, sans notice.
<?php // Connexion à la base de données $mysqli = new mysqli("localhost", "nom_utilisateur", "mot_de_passe", "nom_base"); // Propriété recommandée depuis PHP 8.1 — remplace $mysqli->get_client_info() $versionClient = $mysqli->client_info; echo "Version du client MySQL : " . $versionClient; ?>
Procédurale — sans paramètre
Depuis PHP 8.1, ne passez plus de connexion en argument. La fonction interroge directement le driver installé — elle n'en a pas besoin.
<?php
// Syntaxe correcte depuis PHP 8.1 : sans argument
$versionClient = mysqli_get_client_info();
echo "Version du client MySQL : " . $versionClient;
?>Valeur retournée
La chaîne retournée commence par le préfixe mysqlnd suivi du numéro de version — par exemple mysqlnd 8.1.0. Depuis PHP 8.2, mysqlnd est le seul driver disponible, donc ce format est désormais universel.
Si vous devez comparer des versions, version_compare() ne comprend pas le préfixe mysqlnd. Extrayez le numéro d'abord avec preg_replace('/[^0-9.]/', '', $version) avant de comparer.
Exemples pratiques
Orientée objet : affichage avec détection du driver
Cet exemple utilise la propriété client_info recommandée et identifie le driver actif. Sur PHP 8.2+, le résultat sera toujours mysqlnd.
<?php
$mysqli = new mysqli('localhost', 'mon_utilisateur', 'mon_mot_de_passe', 'ma_base');
if ($mysqli->connect_error) {
die('Erreur de connexion (' . $mysqli->connect_errno . ') : ' .
htmlspecialchars($mysqli->connect_error));
}
// Propriété recommandée — pas de notice de dépréciation
$versionClient = $mysqli->client_info;
// Toujours échapper avant affichage dans une page web
echo "<p><strong>Version du client MySQL :</strong> " . htmlspecialchars($versionClient) . "</p>";
// Sur PHP 8.2+, ce sera toujours mysqlnd
if (strpos($versionClient, 'mysqlnd') !== false) {
echo "<p>Driver : MySQL Native Driver (mysqlnd)</p>";
} else {
echo "<p>Driver : libmysqlclient (PHP <= 8.1 uniquement)</p>";
}
$mysqli->close();
?>Procédurale : appel sans paramètre
Depuis PHP 8.1, la connexion ne se passe plus en argument. Les deux formes retournent le même résultat — seule la première est correcte aujourd'hui.
<?php // Syntaxe correcte depuis PHP 8.1 $versionCorrecte = mysqli_get_client_info(); // Déprécié depuis PHP 8.1 — émet une notice, à corriger // $versionDepreciee = mysqli_get_client_info($connexion); echo "<p><strong>Version :</strong> " . htmlspecialchars($versionCorrecte) . "</p>"; ?>
Sans connexion active
mysqli_get_client_info() n'a pas besoin de base de données. Elle interroge le driver directement — c'est l'approche à adopter dans un script de vérification des prérequis, avant même d'essayer de se connecter.
<?php
if (!extension_loaded('mysqli')) {
die('Extension mysqli non disponible. Activez-la dans php.ini.');
}
$versionClient = mysqli_get_client_info();
echo "<p><strong>Extension MySQLi :</strong> activée</p>";
echo "<p><strong>Version client MySQL :</strong> " . htmlspecialchars($versionClient) . "</p>";
// Extraire le numéro pur avant de comparer — le préfixe "mysqlnd" bloquerait version_compare()
$numeroVersion = preg_replace('/[^0-9.]/', '', $versionClient);
$versionMinimale = '5.6.0';
if (version_compare($numeroVersion, $versionMinimale, '>=')) {
echo "<p>✓ Version conforme (minimum requis : " . $versionMinimale . ")</p>";
} else {
echo "<p>✗ Version insuffisante. Minimum requis : " . $versionMinimale . "</p>";
}
?>Vérification de compatibilité avec les fonctionnalités MySQL
Certaines fonctionnalités MySQL — JSON natif, CTE, window functions — n'existent qu'à partir d'une version donnée. Ce script vérifie si le driver installé les supporte, en extrayant le numéro et en le comparant à chaque seuil.
<?php
$mysqli = new mysqli('localhost', 'utilisateur_app', 'mot_de_passe', 'base_production');
if ($mysqli->connect_error) {
die('Erreur de connexion : ' . htmlspecialchars($mysqli->connect_error));
}
// Propriété recommandée depuis PHP 8.1
$versionComplete = $mysqli->client_info;
$numeroVersion = preg_replace('/[^0-9.]/', '', $versionComplete);
echo "<p><strong>Version client détectée :</strong> " . htmlspecialchars($versionComplete) . "</p>";
echo "<p><strong>Numéro extrait :</strong> " . $numeroVersion . "</p>";
// Version minimale requise par fonctionnalité
$checks = [
'Support JSON natif' => '5.7.0',
'Common Table Expressions (CTE)' => '8.0.0',
'Window Functions' => '8.0.0',
];
foreach ($checks as $fonctionnalite => $versionRequise) {
if (version_compare($numeroVersion, $versionRequise, '>=')) {
echo "<p>✓ " . $fonctionnalite . " : disponible</p>";
} else {
echo "<p>✗ " . $fonctionnalite . " : non disponible (requis : " . $versionRequise . "+)</p>";
}
}
$mysqli->close();
?>Page de diagnostic système
Ce script regroupe en un tableau toutes les informations utiles sur l'environnement MySQL : version PHP, driver, hôte, protocole et jeu de caractères. À placer dans une page d'administration accessible uniquement aux développeurs.
<?php
$connexion = mysqli_connect('localhost', 'utilisateur', 'motdepasse', 'base_donnees');
if (!$connexion) {
die('Impossible de se connecter à MySQL : ' . htmlspecialchars(mysqli_connect_error()));
}
// Collecte des informations système
$versionClientMySQL = mysqli_get_client_info(); // sans paramètre depuis PHP 8.1
$versionServeurMySQL = mysqli_get_server_info($connexion);
$versionPHP = phpversion();
$informationsHote = mysqli_get_host_info($connexion);
$versionProtocole = mysqli_get_proto_info($connexion);
$jeuCaracteres = mysqli_character_set_name($connexion);
// Sur PHP 8.2+, ce sera toujours mysqlnd
$typeDriver = (strpos($versionClientMySQL, 'mysqlnd') !== false)
? 'MySQL Native Driver (mysqlnd)'
: 'libmysqlclient';
echo "<h3>Diagnostic MySQL</h3>";
echo "<table class='table table-sm'>";
echo "<tr><td><strong>Version PHP</strong></td><td>" . htmlspecialchars($versionPHP) . "</td></tr>";
echo "<tr><td><strong>Driver MySQL</strong></td><td>" . htmlspecialchars($typeDriver) . "</td></tr>";
echo "<tr><td><strong>Version client MySQL</strong></td><td>" . htmlspecialchars($versionClientMySQL) . "</td></tr>";
echo "<tr><td><strong>Version serveur MySQL</strong></td><td>" . htmlspecialchars($versionServeurMySQL) . "</td></tr>";
echo "<tr><td><strong>Hôte</strong></td><td>" . htmlspecialchars($informationsHote) . "</td></tr>";
echo "<tr><td><strong>Protocole</strong></td><td>" . htmlspecialchars($versionProtocole) . "</td></tr>";
echo "<tr><td><strong>Jeu de caractères</strong></td><td>" . htmlspecialchars($jeuCaracteres) . "</td></tr>";
echo "</table>";
mysqli_close($connexion);
?>Script de logging avec version MySQL
Dans un contexte de log applicatif, enregistrer la version du driver avec chaque entrée simplifie le débogage quand plusieurs serveurs tournent avec des configurations différentes.
<?php
function loggerEvenementAvecVersion($message, $niveau = 'INFO') {
$versionClient = mysqli_get_client_info(); // sans paramètre — pas de connexion nécessaire
$entreeLog = sprintf(
"[%s] [%s] PHP:%s | MySQLClient:%s | %s\n",
date('Y-m-d H:i:s'),
$niveau,
phpversion(),
$versionClient,
$message
);
$fichierLog = '/var/log/application/mysql_operations.log';
if (file_put_contents($fichierLog, $entreeLog, FILE_APPEND | LOCK_EX) === false) {
error_log("Impossible d'écrire dans le fichier de log : " . $fichierLog);
}
}
loggerEvenementAvecVersion("Connexion établie", "INFO");
loggerEvenementAvecVersion("Erreur lors de la requête SELECT", "ERROR");
?>Points à retenir
- Vérifiez d'abord que l'extension mysqli est chargée avec
extension_loaded('mysqli')— appeler ces fonctions sans extension active génère une erreur fatale. - Depuis PHP 8.1, utilisez la propriété
$mysqli->client_infoà la place de la méthode dépréciée$mysqli->get_client_info(). En style procédural, appelezmysqli_get_client_info()sans argument. - Depuis PHP 8.2, libmysqlclient n'est plus supporté — mysqlnd est le seul driver disponible. Le format de la chaîne retournée commence donc toujours par
mysqlnd. - Passez toujours par
preg_replace('/[^0-9.]/', '', $version)avantversion_compare()— sinon le préfixemysqlndfausse la comparaison. - Version client et version serveur MySQL sont indépendantes : un driver 8.x peut très bien se connecter à un serveur 5.7, et inversement.
- Dans une page web, échappez systématiquement la valeur retournée avec
htmlspecialchars()avant de l'afficher.
Par carabde | Mis à jour le 22 mai 2026