ホームページ  >  記事  >  データベース  >  PHP 8.1 でカスタム MySQLi 接続エラー メッセージが表示されないのはなぜですか?

PHP 8.1 でカスタム MySQLi 接続エラー メッセージが表示されないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-26 11:56:10104ブラウズ

Why Aren't My Custom MySQLi Connection Error Messages Displaying in PHP 8.1 ?

Mysqli_connect が失敗したときに PHP がカスタム エラー メッセージを表示しないのはなぜですか?

問題の理解:

提供されたコードでは、mysqli_connect を使用してデータベースに接続しようとし、場合に備えてカスタム エラー メッセージを出力します。接続が失敗します。ただし、PHP 8.1 以降ではエラーの処理方法が異なり、手動処理を必要とする代わりに例外が発生します。

隠されたカスタム エラー メッセージ:

PHP 8.1 以降、mysqli_connect は例外を生成します。エラーが発生した場合、コードで接続ステータスを手動で確認する必要がなくなりました。さらに、カスタム エラー メッセージをユーザーに表示しないようにする必要があります。代わりに、PHP のエラー処理メカニズムを使用するか、一般的なエラー ページを提供します。

エラーの表示構成:

PHP がユーザーにエラー メッセージを表示しないようにするには、「display_errors」を設定します。 ' php.ini のオプションまたはコードを使用して、 0:

ini_set('display_errors', 0);

サイト ユーザー用エラー ハンドラー:

ユーザー フレンドリーなエラー ページの場合は、エラーをログに記録し、HTTP 500 を設定するエラー ハンドラーを使用します。ステータス コードを表示し、一般的なエラー メッセージを表示するか、エラーにリダイレクトします。

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>
              An internal server error has been occurred.<br>
              Please try again later.";
    }
});

接続エラーを個別に処理する:

ユーザー資格情報のテストなど、接続エラーを具体的に処理したい場合は、次の try..catch ブロックを使用します。専用の接続テスト コード:

try {
    $conn = mysqli_connect(...);
} catch (mysqli_sql_exception $e) {
    // Handle connection error
}

接続の非表示資格情報:

PHP 8.2 以降では、セキュリティを向上させるためにスタック トレースからデータベースのパスワードが非表示になります。

以上がPHP 8.1 でカスタム MySQLi 接続エラー メッセージが表示されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。