現在の位置: ホーム> 最新記事一覧> mysqli :: $ errnoおよびmysqli_report()を使用して、PHPデバッグ効率を改善し、データベース接続エラーをすばやく見つける方法

mysqli :: $ errnoおよびmysqli_report()を使用して、PHPデバッグ効率を改善し、データベース接続エラーをすばやく見つける方法

M66 2025-06-23

データベース接続エラーは、毎日のPHP開発における一般的なが頭痛を引き起こす問題です。特にMySQLI拡張機能を使用する場合、エラーメッセージはぼやけていることが多く、問題の原因をすばやく見つけることが困難です。デバッグ効率を向上させるために、2つのツールmysqli :: $ errnomysqli_report()が特に重要です。この記事では、開発者がデータベース接続エラーを迅速に特定して解決できるように、機能と使用法を詳細に紹介します。

1. mysqli :: $ errnoとは何ですか?

mysqli :: $ errnoは、最新のデータベース操作によって生成されたエラーコードを返すMySQLIオブジェクト指向インターフェイスのプロパティです。エラーがない場合、返品値は0です。このエラーコードを判断することにより、開発者は認証障害、データベースが存在しないかどうかなど、エラーのタイプをより明確に知ることができます。

例:

 $mysqli = new mysqli("localhost", "user", "wrong_password", "database");

if ($mysqli->connect_errno) {
    echo "接続に失敗しました,エラーコード: " . $mysqli->connect_errno . "\n";
    echo "エラーメッセージ: " . $mysqli->connect_error . "\n";
    // 可根据エラーコード做精细化处理
    if ($mysqli->connect_errno === 1045) {
        echo "ヒント:データベースのユーザー名またはパスワードが正しいかどうかを確認してください。";
    }
}

上記の例では、パスワードが間違っている場合、エラーコード1045が返され、認証が失敗したことを示します。このエラーコードを判断することにより、ユーザーまたは開発者に修正するように促すことができます。

2。mysqli_report()とは何ですか?

mysqli_report()は、mysqli拡張機能のエラー報告動作を設定する構成関数です。デフォルトでは、MySQLIエラーはブール値またはnull値のみを返し、開発者は各ステップを手動で確認する必要があります。エラーの報告をオンにした後、MySQLIは警告または例外を投げてデバッグプロセスを簡素化します。

一般的な報告レベル:

  • mysqli_report_off :すべてのエラーレポートをオフにします(デフォルト)。

  • mysqli_report_error :エラーを報告します。

  • mysqli_report_strict :例外形式でエラーをスローします(推奨)。

  • mysqli_report_all :構文警告などを含むすべてのエラーを報告します。

例:

 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

try {
    $mysqli = new mysqli("localhost", "user", "wrong_password", "database");
    // 誤ったクエリを実行します
    $mysqli->query("SELECT * FROM 存在しないテーブル");
} catch (mysqli_sql_exception $e) {
    echo "エラーが発生しました: " . $e->getMessage() . "\n";
    echo "エラーコード: " . $e->getCode() . "\n";
    // エラーをさらに記録または報告できます
    file_put_contents("/var/log/db_errors.log", $e->getMessage(), FILE_APPEND);
}

この書き込み方法は、コードロジックを簡素化するだけでなく、エラーが発生する場所をすばやく見つけ、開発段階での使用に非常に適しています。

3。実用的なスキル:errnoとレポートメカニズムを組み合わせて、エラーをすばやく見つける

実際のプロジェクトでは、開発環境またはテスト環境( mysqli_report ()を使用)で厳密なエラー報告メカニズムを有効にすることをお勧めします。

推奨初期化コード構造:

 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

try {
    $mysqli = new mysqli("localhost", "user", "password", "database");
    echo "データベース接続が成功しました";
} catch (mysqli_sql_exception $e) {
    echo "数据库接続に失敗しました,エラーメッセージ: " . $e->getMessage();
    
    // 如果需要追踪具体エラーコード
    if (strpos($e->getMessage(), '1049') !== false) {
        echo "\nヒント:データベースは存在しません,データベース名を確認してください。";
    } elseif (strpos($e->getMessage(), '1045') !== false) {
        echo "\nヒント:間違ったユーザー名またはパスワード,認定情報を確認してください。";
    }
}

また、カスタムロギングシステムを組み合わせて、エラーメッセージをログログログサービスまたはリモートログサービスにログに記録することもできます。

 $logData = date('Y-m-d H:i:s') . " データベースエラー: " . $e->getMessage() . "\n";
file_put_contents("https://m66.net/logs/db_errors.log", $logData, FILE_APPEND);

注:上記の例のURLドメイン名は、 M66.netに置き換えられています。実際の状況に応じて、リモートログ受信ロジックを処理してください。

4。概要

MySqli :: $ errnoおよびmysqli_report()を合理的に使用することにより、PHPデバッグ効率を大幅に改善でき、データベース接続に問題がある場合はできるだけ早くエラーを見つけて配置できます。開発環境で常に厳格モード( mysqli_report_strict )を有効にし、例外処理メカニズムと協力して、安全なダウングレードまたは生産環境でのロギングを実行することをお勧めします。

デバッグは目標ではなく、安定性が目標です。これら2つのガジェットを適切に使用することで、PHPデータベース操作がより制御可能で測定可能で保守可能になります。