Lorsque vous utilisez PHP pour les opérations de base de données MySQL, vous rencontrez souvent divers avertissements et erreurs. Afin d'assurer la robustesse du programme, nous devons capturer et gérer uniformément ces informations d'exception. Cet article combinera la méthode MySQLI :: get_warnings () et le mécanisme d'exception dans l'extension MySQLI orientée objet de PHP pour expliquer comment réaliser la gestion des erreurs unifiées.
La méthode mysqli :: get_warnings () est utilisée pour obtenir des informations d'avertissement générées dans l'instruction MySQL récemment exécutée. En règle générale, les requêtes MySQL peuvent être exécutées avec succès mais sont accompagnées de certains avertissements (tels que la troncature du champ, le débordement des données, etc.), qui sont souvent facilement négligés. Si vous comptez uniquement sur la détection des erreurs traditionnelles, il est difficile pour les programmes de saisir ces problèmes potentiels.
D'un autre côté, le mécanisme d'exception de PHP peut nous aider à attraper et à gérer les erreurs, en particulier le processus d'erreur peut être géré uniformément à l'aide de la structure d'essai ... Catch .
Capturez Mysqli Error <br> Lorsqu'une erreur grave se produit, MySQLI signale généralement une erreur ou renvoie FAUX . Nous pouvons obtenir des informations d'erreur via le mécanisme de capture des exceptions.
Vérifiez et gérez les avertissements <br> Obtenez la chaîne d'avertissement via mysqli :: get_warnings () . S'il y a un avertissement, lancez une exception personnalisée ou effectuez une journalisation et un traitement correspondants.
Gestion des erreurs unifiées <br> En attrapant des exceptions, en traitant de manière centralisée avec toutes les erreurs et avertissements en un seul endroit, en gardant le code simple et facile à entretenir.
Ce qui suit montre un script PHP simple qui montre comment combiner mysqli :: get_warnings () et mécanisme d'exception pour réaliser une gestion des erreurs unifiées.
<?php
class DatabaseException extends Exception {}
function executeQuery(mysqli $mysqli, string $sql) {
// Exécuter une requête
if (!$result = $mysqli->query($sql)) {
// Erreur de requête,faire une exception
throw new DatabaseException("Query Error: " . $mysqli->error);
}
// Vérifier l'avertissement
$warning = $mysqli->get_warnings();
if ($warning) {
$warnings = [];
do {
$warnings[] = sprintf("Warning Code %d: %s", $warning->errno, $warning->message);
} while ($warning = $warning->next());
// Jetez une exception d'avertissement(Vous pouvez également enregistrer des journaux ou faire d'autres traitements)
throw new DatabaseException("Query Warnings: " . implode("; ", $warnings));
}
return $result;
}
// Exemple d'utilisation
$mysqli = new mysqli("gitbox.net", "username", "password", "database");
try {
$sql = "INSERT INTO users (id, name) VALUES (1, 'test')";
$result = executeQuery($mysqli, $sql);
echo "Query executed successfully.";
} catch (DatabaseException $ex) {
// Gestion des erreurs unifiées
echo "Database Exception: " . $ex->getMessage();
}
DatabaseException personnalisée hérite de l'exception et est utilisée pour lancer uniformément les erreurs et avertissements liés à la base de données.
La fonction EXECUTEQUERY est responsable de l'exécution des requêtes SQL et de la détection des erreurs et des avertissements.
Lorsque l'exécution de la requête échoue, une exception est immédiatement lancée.
Lorsque la requête réussit mais qu'il y a un avertissement, itère sur la chaîne d'avertissement et lance une exception.
Utilisez Try ... Catch pour attraper et gérer les exceptions uniformément à l'appel.
En combinant MySQLI :: get_warnings () et des mécanismes d'exception PHP, nous pouvons capturer plus attentivement les exceptions dans les opérations de base de données, en particulier celles des messages d'avertissement communément négligés. Cela améliore non seulement la robustesse du programme, mais facilite également les erreurs de gestion et de journalisation centralisées, améliorant la maintenabilité du code.
Si votre projet a des exigences élevées pour les erreurs de base de données et les avertissements, il est recommandé d'utiliser la solution ci-dessus pour le gérer uniformément.