Heim >Datenbank >MySQL-Tutorial >Warum wird meine benutzerdefinierte Fehlermeldung nicht angezeigt, wenn mysqli_connect in PHP fehlschlägt?
In der Vergangenheit verwendete PHP die MySQL-Erweiterung, um eine Verbindung zu Datenbanken herzustellen, was eine manuelle Fehlerbehandlung erforderte . Mit der Einführung von mysqli werden Fehler jedoch automatisch ausgelöst, sodass manuelle Prüfungen wie if (!$conn) nicht mehr erforderlich sind.
In PHP 8.1 und höher löst mysqli Ausnahmen für Fehler aus. Daher wird die benutzerdefinierte Fehlermeldung in Ihrem Code nicht angezeigt.
Der empfohlene Ansatz besteht darin, einen Try-Catch-Block zur Behandlung von Datenbankverbindungsfehlern zu verwenden, anstatt sich darauf zu verlassen manuelle Prüfungen:
try { $conn = mysqli_connect($dbServerName, $dbUsername, $dbPassword, $dbName); } catch (Exception $e) { // Handle the error here }
Um Fehlermeldungen vor Benutzern auszublenden, setzen Sie display_errors auf 0 in php.ini oder mit ini_set():
ini_set('display_errors', 0);
Verwenden Sie einen Fehlerhandler, um eine generische Fehlerseite anstelle der spezifischen Fehlermeldung anzuzeigen :
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."; } });
Verwenden Sie einen separaten Verbindungstest mit try-catch, um Anmeldeinformationen für Installationsskripte oder Sicherungsszenarien zu testen:
try { $conn = mysqli_connect($dbServerName, $dbUsername, $dbPassword, $dbName); } catch (Exception $e) { // Handle the error }
In PHP 8.2 und höher wird das Datenbankkennwort aus dem Stack-Trace ausgeblendet.
Das obige ist der detaillierte Inhalt vonWarum wird meine benutzerdefinierte Fehlermeldung nicht angezeigt, wenn mysqli_connect in PHP fehlschlägt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!