Custom Error Messages with Failed mysqli_connect
When attempting to connect to a database, mysqli_connect used to display error messages generated by the language, but this behavior changed with PHP 8.1. Now, mysqli throws exceptions on error, eliminating the need for manual error handling.
Custom Error Messages Are Counterproductive
Using custom error messages for connection errors is not recommended. Error detection and handling should be handled automatically by mysqli or PDO, without the need for manual if checks. Displaying custom error messages can compromise user security and provide unnecessary details.
Error Handling Best Practices
To conceal error messages from users, set the display_errors configuration option to 0 in php.ini or your PHP code:
<code class="php">ini_set('display_errors', 0);</code>
Additionally, implement an error handler to display a generic error page for unrecoverable errors:
<code class="php">set_exception_handler(function ($e) { error_log($e); http_response_code(500); if (ini_get('display_errors')) { echo $e; } else { echo '<h1>500 Internal Server Error</h1><br>An internal server error has been occurred.<br>Please try again later.'; } });</code>
HTTP 500 Errors
When a page cannot deliver content due to a server error, it should respond with an HTTP 500 code. This is necessary for proper error handling and is not something that should be suppressed.
Catching Connection Errors for Specific Scenarios
In some cases, it may be necessary to catch connection errors explicitly. This can be achieved using a try..catch block around the connection attempt when the handling scenario goes beyond error reporting.
Hiding Connection Credentials
To prevent confidential database passwords from being exposed in stack traces, update PHP to version 8.2 or later, which conceals such information.
The above is the detailed content of ## How to Handle Database Connection Errors in PHP 8.1 and Beyond: Best Practices and Security Considerations. For more information, please follow other related articles on the PHP Chinese website!