「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > PHP 8.1 にアップグレードした後、mysqli_connect エラーでカスタム エラー メッセージが表示されないのはなぜですか?

PHP 8.1 にアップグレードした後、mysqli_connect エラーでカスタム エラー メッセージが表示されないのはなぜですか?

2024 年 11 月 8 日に公開
ブラウズ:281

Why Are My Custom Error Messages Not Displaying in mysqli_connect Failures After Upgrading to PHP 8.1?

mysqli_connect の失敗に隠されたカスタム エラー メッセージを調査する

データベース接続を確立しようとしたときに、定義したカスタム エラー メッセージが表示されないという問題が発生しました。接続に失敗した場合に表示されます。また、ユーザーの視点からエラー メッセージを抑制する方法も探しています。

エラー メッセージの性質

PHP 8.1 以降、mysqli 拡張機能は、エラーが発生した場合に自動的に例外をスローするようになりました。これにより、PHP の以前のバージョンで行われていたような手動エラー処理の必要がなくなります。

エラーの背後にある根拠抑制

定義したようなカスタム エラー メッセージは、エラー処理には推奨されなくなりました。 PDO と mysqli はどちらも、他の PHP コマンドと同様に、自動的にエラーを発生させる機能があります。したがって、if (!$conn) セグメントで試みたような手動でのエラー チェックは廃止されました。

ユーザーへのエラーの公開を避ける

エラー メッセージがユーザーに届くのを防ぐにはこのオプションを 0 に設定すると、すべてのエラー出力を抑制できます。これは、php.ini ファイルで、または PHP コードで直接設定できます:

ini_set('display_errors', 0);

ユーザーフレンドリーなエラー ページの提供

不可解なエラー メッセージを表示する代わりに、サイト訪問者にわかりやすいエラー ページを表示することをお勧めします。これは、すべての回復不可能なエラーをキャッチする以下のようなエラー ハンドラーを設定することで実現できます:

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

データベース接続エラーを個別に処理する

データベース接続エラーを特別に処理する必要がある場合は、通常の接続テスト スクリプトとは別に、try-catch ブロックでラップされた個別の接続テスト スクリプトを使用できます。接続コード。

接続資格情報の保護

セキュリティを強化するには、PHP バージョンを 8.2 以降に更新してください。これにより、データベースがわかりにくくなります。パスワードがスタック トレースに表示されないようにします。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3