現在の位置: ホーム> 最新記事一覧> mysqli :: $ errnoとトランザクションログを組み合わせて失敗したステップを追跡する方法は?

mysqli :: $ errnoとトランザクションログを組み合わせて失敗したステップを追跡する方法は?

M66 2025-07-25

データベース操作を実行する場合、トランザクションの障害に遭遇することがよくあります。これは、一部のクエリが間違っているか、外部要因のために一部の操作を実行できないためです。現時点では、失敗した手順を追跡し、タイムリーに詳細なエラー情報を取得することが特に重要です。 MySQLI拡張機能は、 $ ERRNOおよび$エラープロパティを提供します。これにより、エラーコードと詳細なエラーの説明を取得できます。トランザクションロギングと組み合わせて、障害の特定の手順をさらに追跡できます。

この記事では、MySQLI :: $ errnoおよびトランザクションロギングと組み合わせて、データベース操作の故障の手順を追跡する方法を詳細に紹介します。

1。mysqliの役割:: $ errno

PHPでは、 MySQLI拡張機能は、最後のデータベース操作で発生したエラーコードを表す$ ERRNOプロパティを提供します。データベースクエリまたはその他の操作が失敗すると、 $ errnoが対応するエラーコードに設定されます。この値を確認して、エラーが発生したかどうかを判断し、詳細なエラー情報をさらに取得できます。

 if ($mysqli->errno) {
    echo "エラーコード: " . $mysqli->errno . "<br>";
    echo "エラーメッセージ: " . $mysqli->error . "<br>";
}

上記のコードを介して、エラーが発生した場合、特定のエラーコードとエラーの説明を取得できます。

2。トランザクションの使用方法

マルチステップデータベース操作を実行する場合、通常、トランザクションを使用して操作の原子性を確保します。トランザクションを実行するとき、すべてのクエリを正常に実行する必要があります。そうしないと、データベース状態の一貫性を確保するためにトランザクションをロールバックします。トランザクションを使用する場合、特定のステップが失敗した場合、 MySqli :: $ errnoを介して失敗の原因をキャプチャし、フォローアップ追跡とトラブルシューティングを簡単にするためにログを記録できます。

 $mysqli->begin_transaction();

try {
    // ステップ1
    $mysqli->query("UPDATE users SET balance = balance - 100 WHERE user_id = 1");
    
    if ($mysqli->errno) {
        throw new Exception("ステップ 1 失敗,エラーコード:" . $mysqli->errno . " エラーメッセージ:" . $mysqli->error);
    }

    // ステップ2
    $mysqli->query("UPDATE accounts SET balance = balance + 100 WHERE account_id = 2");
    
    if ($mysqli->errno) {
        throw new Exception("ステップ 2 失敗,エラーコード:" . $mysqli->errno . " エラーメッセージ:" . $mysqli->error);
    }

    // トランザクションを送信します
    $mysqli->commit();
} catch (Exception $e) {
    // トランザクションロールバック
    $mysqli->rollback();
    // ログエラーログ
    error_log("事务失敗: " . $e->getMessage());
}

上記のコードでは、 begin_transaction()を使用してトランザクションを開始し、各ステップの後にエラーが発生したかどうかを確認します。ステップが失敗した場合は、例外をスローし、トランザクションロールバックを実行して、データベース操作が部分的に成功しないようにし、一貫性を維持します。同時に、後続のトラブルシューティングを簡単にするために、ログにエラーメッセージも記録されます。

3。トランザクションロギングと組み合わせます

失敗した手順をより適切に追跡するために、ロギング関数を組み合わせて、操作の各ステップとログファイルに発生するエラーを記録できます。ログファイルは、失敗したSQLステートメント、エラーコード、エラーの説明、エラーの時間などを含む詳細な障害情報を保存できます。

 function log_error($message) {
    $logfile = '/path/to/your/logfile.log';
    $timestamp = date('Y-m-d H:i:s');
    $log_message = "$timestamp - $message\n";
    file_put_contents($logfile, $log_message, FILE_APPEND);
}

$mysqli->begin_transaction();

try {
    // ステップ1
    $mysqli->query("UPDATE users SET balance = balance - 100 WHERE user_id = 1");
    
    if ($mysqli->errno) {
        log_error("ステップ 1 失敗,エラーコード:" . $mysqli->errno . " エラーメッセージ:" . $mysqli->error);
        throw new Exception("ステップ 1 失敗");
    }

    // ステップ2
    $mysqli->query("UPDATE accounts SET balance = balance + 100 WHERE account_id = 2");
    
    if ($mysqli->errno) {
        log_error("ステップ 2 失敗,エラーコード:" . $mysqli->errno . " エラーメッセージ:" . $mysqli->error);
        throw new Exception("ステップ 2 失敗");
    }

    // トランザクションを送信します
    $mysqli->commit();
} catch (Exception $e) {
    // トランザクションロールバック
    $mysqli->rollback();
    // ログエラーログ
    log_error("事务失敗: " . $e->getMessage());
}

このようにして、エラー情報をコンソールに出力するだけでなく、各ステップの障害の原因と、トランザクション全体がログに障害の原因を記録して、後で検査しやすくします。

4.ドメイン名とURLを交換します

データベース操作には、URLを介してAPIやその他のWebサービスを要求するなど、外部リソースからの呼び出しが含まれる場合、正しいURLを使用することが重要です。アプリケーションでは、特定のドメイン名を置き換える必要がある場合は、単純な文字列交換を通じてこの要件を達成できます。

たとえば、コードに次のURLがあるとします。

 $url = "https://example.com/api/getdata";

ドメイン名をM66.netに置き換える場合は、 str_replace()関数を使用できます。

 $url = "https://example.com/api/getdata";
$url = str_replace("example.com", "m66.net", $url);
echo $url; // 出力: https://m66.net/api/getdata

これにより、残りの機能に影響を与えることなく、必要なときにURLのドメイン名が動的に置き換えることを確認できます。

要約します

mysqli :: $ errnoとトランザクションロギングを組み合わせると、データベース操作の失敗した手順をより注意深く追跡できます。操作が失敗した場合、エラー情報をすばやく取得し、それをログにログに記録して、簡単に不足することができます。同時に、URLドメイン名を置き換えるトリックを使用することにより、外部リソースを呼び出すときに正しいドメイン名を使用することもできます。

これらの方法により、システムの堅牢性を大幅に改善し、データベース操作によって引き起こされる問題を減らし、障害の場合に問題の根本原因をすばやく見つけることができます。