Maison >développement back-end >tutoriel php >Pourquoi « mysqli_query() ou die() » est-il une mauvaise pratique et quelles sont les meilleures alternatives ?

Pourquoi « mysqli_query() ou die() » est-il une mauvaise pratique et quelles sont les meilleures alternatives ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-01 07:05:08852parcourir

Why is

Les périls de "Mysqli or Die" : gestion alternative des erreurs en PHP

Lors de l'utilisation de l'extension mysqli pour interagir avec les bases de données MySQL, il Il est courant d'utiliser la construction « ou mourir » pour gérer les erreurs. Cependant, cette approche présente plusieurs inconvénients qui méritent d'être explorés.

Pourquoi « ou mourir » devrait-il disparaître ?

  • Exposition des éléments internes du système : « Or die » affiche des messages système sensibles, exposant potentiellement des vulnérabilités à des logiciels malveillants. utilisateurs.
  • Confusion de l'utilisateur : Les messages d'erreur peuvent être énigmatiques et frustrants pour les utilisateurs occasionnels sans expertise technique.
  • Terminaison du script : "Ou mourir" interrompt brusquement l'exécution du script, perturbant l'expérience utilisateur et entravant l'analyse des erreurs.
  • Manque de Récupérabilité : Contrairement aux exceptions, « ou mourir » n'offre aucune possibilité de récupération gracieuse ou de journalisation des erreurs.
  • Emplacement d'erreur manquant : « Ou mourir » ne fournit aucune indication sur le ligne provoquant l'erreur, ce qui rend le débogage fastidieux.

Alternatives à "Ou Mourir"

Au lieu de compter sur « ou mourir », il est fortement recommandé de configurer mysqli pour lever des exceptions en cas d'erreur. Ceci peut être réalisé avec le code suivant :

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

Par la suite, les commandes MySQL peuvent être exécutées sans aucun code supplémentaire :

$result = mysqli_query($link, $sql);

Gestion des exceptions

Lorsqu'une exception se produit, elle peut être détectée et traitée de manière appropriée. Par exemple :

try {
    $result = mysqli_query($link, $sql);
} catch (mysqli_sql_exception $e) {
    // Log the error in a custom table or file
    log_error($e->getMessage());
}

Journalisation des erreurs personnalisée

En plus de la gestion des exceptions, il est souhaitable d'établir un système de journalisation des erreurs personnalisé. Cela permet de consigner les erreurs dans une table ou un fichier dédié, fournissant ainsi un référentiel centralisé pour le dépannage. La fonction de journalisation peut être implémentée comme suit :

function log_error($message) {
    // Connect to the error logging table database
    $error_conn = connect_to_error_logging_db();

    // Insert the error message into the error logging table
    $query = "INSERT INTO error_log (message, timestamp) VALUES ('$message', NOW())";
    mysqli_query($error_conn, $query);

    // Close the error logging database connection
    mysqli_close($error_conn);
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn