MySQLI :: Get_Warnings est une méthode fournie par l'extension MySQLI de PHP pour obtenir des informations d'avertissement générées par des instructions SQL récemment exécutées. Il renvoie une chaîne d'objets MySQLI_WARNING , contenant chacun des détails d'avertissement tels que les codes d'erreur et les messages d'avertissement.
En traversant ces avertissements, les développeurs peuvent capturer des détails qui ne sont pas explicitement lancés mais peuvent affecter l'exactitude des données.
Après avoir exécuté la requête SQL, appelez get_warnings pour vérifier s'il y a un avertissement.
Traversez la chaîne d'avertissement et collectez des informations d'avertissement.
Les informations d'avertissement sont sorties ou enregistrées en temps réel pour plus de commodité de l'analyse ultérieure.
Il peut être combiné avec le système de journal ou l'affichage frontal pour former un outil de surveillance visuelle.
L'exemple suivant montre comment exécuter une instruction SQL et obtenir des informations d'avertissement via mysqli :: get_warnings et la publier dans le journal de débogage.
<?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");
if ($mysqli->connect_error) {
die("Échec de la connexion: " . $mysqli->connect_error);
}
// Exemple SQL:L'insertion d'une clé primaire en double peut générer un avertissement
$sql = "INSERT INTO test_table (id, name) VALUES (1, 'Alice')";
// Exécuter une requête
if ($mysqli->query($sql) === TRUE) {
echo "Remettre en question l'exécution avec succès\n";
// Obtenir un avertissement
if ($warnings = $mysqli->get_warnings()) {
do {
echo "Code d'avertissement: " . $warnings->errno . "\n";
echo "Message d'avertissement: " . $warnings->message . "\n";
} while ($warnings = $warnings->next());
} else {
echo "Pas d'avertissement\n";
}
} else {
echo "L'exécution de la requête a échoué: " . $mysqli->error . "\n";
}
$mysqli->close();
?>
Pour persister des informations d'avertissement, vous pouvez rédiger des avertissements à un fichier:
function logWarnings($mysqli) {
if ($warnings = $mysqli->get_warnings()) {
$logFile = 'db_warnings.log';
do {
$log = date('Y-m-d H:i:s') . " - Warning {$warnings->errno}: {$warnings->message}\n";
file_put_contents($logFile, $log, FILE_APPEND);
} while ($warnings = $warnings->next());
}
}
L'enregistrement automatique peut être réalisé en appelant des logwarnings ($ mysqli) après chaque opération de base de données.
L'appel des scripts PHP via Ajax renvoie les derniers avertissements. La page frontale peut mettre à jour la liste d'avertissement en temps réel, ce qui facilite la visualisation des développeurs.
Les avertissements ne sont liés qu'à l'opération de base de données la plus récente, et les anciens avertissements seront écrasés après l'exécution de la nouvelle déclaration.
MySQLI :: get_warnings n'est valide que lorsque MySQL Server prend en charge les mécanismes d'avertissement.
Les requêtes fréquentes et les avertissements d'enregistrement peuvent avoir un certain impact sur les performances. Il est recommandé de permettre uniquement lors du débogage de l'environnement ou de la surveillance des exceptions.
En utilisant la fonction MySQLI :: Get_Warnings de PHP, vous pouvez obtenir efficacement des informations d'avertissement dans les opérations de base de données. En combinant la journalisation et une technologie de présentation en temps réel, un outil de surveillance d'avertissement de base de données simple peut être conçu pour aider les développeurs à découvrir des problèmes potentiels en temps opportun et à optimiser l'accès à la base de données et les performances des applications.