Guide complet sur la fonction mysqli_warning_count en PHP
Découvrez la fonction mysqli_warning_count en PHP, ses fonctionnalités et comment récupérer les avertissements MySQL dans vos projets.
Lorsque vous travaillez avec des bases de données MySQL en PHP, l'extension mysqli fournit diverses fonctions pour les opérations de base de données. L'une d'elles est mysqli_warning_count, qui a été dépréciée en PHP 8.0 et supprimée en PHP 8.1. Elle retournait auparavant le nombre d'avertissements générés par la requête MySQL précédente.
Ce guide présente les fonctionnalités de la fonction et montre comment l'utiliser efficacement dans vos projets PHP.
Qu'est-ce que la fonction mysqli_warning_count ?
La fonction mysqli_warning_count était une fonction PHP intégrée qui retournait le nombre d'avertissements générés lors de l'exécution de la requête MySQL précédente. Elle a été dépréciée en PHP 8.0 et supprimée en PHP 8.1. Contrairement aux erreurs, qui arrêtent généralement l'exécution du script, les avertissements indiquent des problèmes non fatals tels que la troncature de données ou les insertions de clé en double qui permettent à la requête de se terminer avec succès.
La fonction prend un argument : l'objet de connexion MySQL retourné par mysqli_connect ou new mysqli().
Voici la syntaxe de la fonction mysqli_warning_count :
mysqli_warning_count($connection);Fonctionnalités de la fonction mysqli_warning_count
La fonction mysqli_warning_count offrait diverses fonctionnalités qui en faisaient un outil utile pour récupérer les informations d'avertissement générées lors de l'exécution des requêtes dans les bases de données MySQL en PHP. Voici quelques-unes des fonctionnalités clés de la fonction :
1. Récupération du nombre d'avertissements
La fonctionnalité principale de la fonction mysqli_warning_count était de récupérer le nombre d'avertissements générés lors de l'exécution de la requête MySQL précédente. Ces informations peuvent être utiles pour diagnostiquer les problèmes potentiels avec le serveur MySQL lors de l'exécution des requêtes.
2. Exigence d'un objet de connexion
La fonction nécessitait un objet de connexion MySQL valide. Vous pouviez passer une connexion existante pour récupérer le nombre d'avertissements de la requête la plus récente exécutée sur cette connexion.
3. Comptage des avertissements, pas des erreurs
mysqli_warning_count ne reflétait que les avertissements — conditions non fatales soulevées par la dernière instruction. Les erreurs (qui interrompent l'instruction) sont signalées séparément via mysqli_error() / mysqli_errno(). Une requête peut donc réussir et produire quand même un ou plusieurs avertissements.
Comment utiliser la fonction mysqli_warning_count
Voici quelques étapes pour utiliser la fonction mysqli_warning_count dans vos projets PHP :
1. Connexion au serveur MySQL
Avant de pouvoir utiliser la fonction mysqli_warning_count, vous devez établir une connexion au serveur MySQL à l'aide de la fonction mysqli_connect. Voici un exemple de code :
<?php
$host = 'localhost';
$user = 'username';
$password = 'password';
$database = 'mydatabase';
$connection = mysqli_connect($host, $user, $password, $database);
if (!$connection) {
die('Connection failed: ' . mysqli_connect_error());
}2. Récupération du nombre d'avertissements
Une fois que vous avez établi une connexion au serveur MySQL et exécuté une requête MySQL, vous pouvez utiliser la fonction mysqli_warning_count pour récupérer le nombre d'avertissements générés lors de l'exécution de la requête MySQL précédente. Voici un exemple de code :
<?php
// Execute a query that generates a warning (e.g., duplicate key insertion)
// Assumes a table 'users' exists with a unique key on 'id'
mysqli_query($connection, "INSERT IGNORE INTO users (id, name) VALUES (1, 'Alice'), (1, 'Bob')");
// Get the number of warnings
$warning_count = mysqli_warning_count($connection);
echo "Warning count: " . $warning_count;
// Retrieve the actual warning messages
$warnings = mysqli_get_warnings($connection);
if ($warnings) {
while ($warning = $warnings->next_warning()) {
echo "Level: " . $warning->Level . ", Message: " . $warning->Message . "\n";
}
}Ce code récupère le nombre d'avertissements générés lors de l'exécution de la requête MySQL précédente à l'aide de la fonction mysqli_warning_count, et montre comment récupérer les messages d'avertissement détaillés avec mysqli_get_warnings().
Une exécution typique du code ci-dessus affiche quelque chose comme :
Warning count: 1
Level: Note, Message: Duplicate entry '1' for key 'PRIMARY'Le remplacement moderne (PHP 8.1+)
Comme mysqli_warning_count n'existe plus en PHP 8.1 et versions ultérieures, utilisez la propriété de connexion $mysqli->warning_count pour lire le nombre, et mysqli_get_warnings() (toujours disponible) pour lire les détails :
<?php
$mysqli = new mysqli('localhost', 'username', 'password', 'mydatabase');
$mysqli->query("INSERT IGNORE INTO users (id, name) VALUES (1, 'Alice'), (1, 'Bob')");
// Property replacing the removed mysqli_warning_count() function
echo "Warning count: " . $mysqli->warning_count . "\n";
if ($warnings = $mysqli->get_warnings()) {
do {
echo "Code {$warnings->errno}: {$warnings->message}\n";
} while ($warnings->next());
}Pour le nouveau code, il est recommandé d'activer la gestion des exceptions afin que les erreurs lèvent une mysqli_sql_exception et ne passent jamais silencieusement :
<?php
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);Conclusion
En conclusion, mysqli_warning_count offrait auparavant un moyen simple de vérifier les avertissements MySQL après l'exécution d'une requête. Cependant, comme elle a été supprimée en PHP 8.1, le développement PHP moderne s'appuie généralement sur la gestion des exceptions (mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT)) pour une gestion robuste des erreurs. Si vous maintenez des bases de code héritées, vous pouvez toujours utiliser mysqli_get_warnings() pour inspecter les détails spécifiques des avertissements du serveur MySQL.