Maison >base de données >tutoriel mysql >Pourquoi mon message d'erreur personnalisé ne s'affiche-t-il pas lorsque mysqli_connect échoue en PHP ?

Pourquoi mon message d'erreur personnalisé ne s'affiche-t-il pas lorsque mysqli_connect échoue en PHP ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-30 17:35:14512parcourir

Why Doesn't My Custom Error Message Show When mysqli_connect Fails in PHP?

Pourquoi PHP n'affiche-t-il pas de message d'erreur personnalisé lorsque mysqli_connect échoue ?

Dans le passé, PHP utilisait l'extension MySQL pour se connecter aux bases de données, ce qui nécessitait une gestion manuelle des erreurs . Cependant, avec l'introduction de mysqli, les erreurs sont automatiquement générées, éliminant le besoin de vérifications manuelles comme if (!$conn).

Dans PHP 8.1 et versions ultérieures, mysqli génère des exceptions pour les erreurs. Par conséquent, le message d'erreur personnalisé dans votre code ne s'affiche pas.

Comment gérer les erreurs de connexion

L'approche recommandée consiste à utiliser un bloc try-catch pour gérer les erreurs de connexion à la base de données plutôt que de s'appuyer sur vérifications manuelles :

try {
    $conn = mysqli_connect($dbServerName, $dbUsername, $dbPassword, $dbName);
} catch (Exception $e) {
    // Handle the error here
}

Comment masquer les messages d'erreur des utilisateurs

Pour masquer les messages d'erreur des utilisateurs, définissez display_errors à 0 dans php.ini ou en utilisant ini_set() :

ini_set('display_errors', 0);

Comment afficher les pages d'erreur conviviales

Utilisez un gestionnaire d'erreurs pour afficher une page d'erreur générique au lieu de l'erreur spécifique message :

set_exception_handler(function ($e)
{
    // Log the error
    error_log($e);

    // Set HTTP status code to 500
    http_response_code(500);

    // Check display_errors setting
    if (ini_get('display_errors')) {
        echo $e;
    } else {
        echo "<h1>500 Internal Server Error</h1>An internal server error has occurred. Please try again later.";
    }
});

Comment tester les informations d'identification de connexion

Utilisez un test de connexion distinct avec try-catch pour tester les informations d'identification pour les scripts d'installation ou les scénarios de sauvegarde :

try {
    $conn = mysqli_connect($dbServerName, $dbUsername, $dbPassword, $dbName);
} catch (Exception $e) {
    // Handle the error
}

Comment masquer les informations de connexion

Dans PHP 8.2 et versions ultérieures, le mot de passe de la base de données est masqué dans la trace de la pile.

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