PHP 8.2向け 一時DB診断版

目的: DB接続とSELECTの失敗を、認証情報を出さずに分類する。
元ZIPの業務処理・DB接続定数は変更していません。

1. 移行先PCの稼働中ファイルをバックアップしてください。
2. ZIP内appl/の次の3ファイルだけを、実際のアプリの同じフォルダーへ配置してください。
   t1_login1.php（変更）
   pdo_util1.php（変更）
   db_diagnostic.php（追加）
   pdo_util1.phpに含まれる接続定数は、移行先の現行値と一致することを配置前に確認してください。
   一致しない場合は移行先の現行値を維持してください。接続値を共有する必要はありません。
3. 通常どおりログインします。debug1はfalseのままにします。
4. ブラウザーのNetworkでt1_login1.phpのResponseを確認してください。
   db_diagnostic と err_msg を確認します。
   応答ヘッダー X-Appl-Diagnostic: dbdiag-20261022-v1 が診断版の識別子です。
   識別子がない場合は配置先・アクセス先・OPcacheを確認してください。
5. DB例外があれば、標準PHPエラーログにも [appl-dbdiag] の記録が出ます。
   ログ出力先はWebサーバーのPHP設定に依存します。

stage=connect: DB接続で失敗
stage=select: 接続後のSQL実行・取得で失敗
category=driver_missing: PDO PostgreSQLドライバーなし
authentication_failed: DB接続の認証失敗（画面の担当者パスワードとは別）
access_rule_or_ssl: 接続許可またはSSL関連
connection_refused: 接続拒否
connection_timeout: タイムアウト
hostname_resolution: 名前解決
table_missing / column_missing: テーブル／列不一致
permission_denied: DB権限
database_missing: DB不存在
sql_syntax: SQL構文
server_disconnected: 接続切断
unclassified: 自動分類できないため、SQLSTATEと環境情報から追加調査が必要

例外の原文、SQL、入力値、DB接続情報、ファイルパスは診断出力に含めません。
分類は代表的な英語メッセージとSQLSTATEによるものです。
日本語等のメッセージや未知の原因ではunclassifiedになる場合があります。
HTTPステータス、通常の認証判定、正常時のJSON項目は変更していません。
DB例外時のみdb_diagnostic項目と分類済みerr_msgを返します。
既存の他のDBヘルパーも、例外を安全に分類するようにしています。

確認後はバックアップした2ファイルを復元し、db_diagnostic.phpを削除してください。
ZIPには元ソースの接続設定が含まれるため、外部公開しないでください。

検証: PHP 8.5.2で全9ファイルの構文検査成功。
合成エラー5例で分類と秘密文字列非出力を確認。
PHP 8.2実行、移行先DB接続、ブラウザーからのログインは未実施。
