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 ?
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.
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 }
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);
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."; } });
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 }
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!