これまで、PHP は MySQL 拡張機能を使用してデータベースに接続していましたが、これには手動のエラー処理が必要でした。 。ただし、mysqli の導入により、エラーが自動的にスローされるため、if (!$conn) などの手動チェックが不要になります。
PHP 8.1 以降では、mysqli はエラーに対して例外をスローします。したがって、コード内のカスタム エラー メッセージは表示されません。
推奨されるアプローチは、データベース接続エラーを処理するために、次のブロックに依存するのではなく、try-catch ブロックを使用することです。手動チェック:
try { $conn = mysqli_connect($dbServerName, $dbUsername, $dbPassword, $dbName); } catch (Exception $e) { // Handle the error here }
ユーザーからエラー メッセージを非表示にするには、 php.ini で、または ini_set() を使用して、display_errors を 0 に設定します:
ini_set('display_errors', 0);
エラー ハンドラーを使用して、特定のエラー メッセージ:
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."; } });
try-catch を使用した別の接続テストを使用して、インストール スクリプトまたはバックアップ シナリオの資格情報をテストします。
try { $conn = mysqli_connect($dbServerName, $dbUsername, $dbPassword, $dbName); } catch (Exception $e) { // Handle the error }
PHP 8.2 およびその後、データベースのパスワードはスタック トレースから隠されます。
以上がPHP で mysqli_connect が失敗したときにカスタム エラー メッセージが表示されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。