現在の位置: ホーム> 最新記事一覧> mysqli ::データベース関連の単体テストとデバッグのためにphpunitと組み合わせたデバッグ

mysqli ::データベース関連の単体テストとデバッグのためにphpunitと組み合わせたデバッグ

M66 2025-05-17

データベース関連のユニットテストを実行する場合、特にテストが故障して複雑なSQL操作が含まれる場合、正確に何が起こっているかをより深く理解する必要がある場合があります。 PHPのMySQLI拡張機能は、非常に実用的なデバッグ機能MySqli :: Debug()を提供します。これにより、基礎となる操作ログをファイルに出力できます。この記事では、mysqli :: debug()を組み合わせて、テストにphpunitを使用する際にデータベース操作のデバッグ機能を実装する方法を紹介します。

1。mysqli :: debug()とは何ですか?

mysqli :: debug(string $ debug_options)は、 mysqliクラスのメソッドであり、クライアントデバッグログを有効にするために使用できます。そのパラメーターは、出力ファイルパスやログレベルなどのデバッグ情報の構成を説明する文字列です。自動的にログを有効にしないことに注意してください。また、MySQLサーバーのコンパイルオプションでのデバッグのサポートも必要です。

 mysqli::debug("d:t:o,/tmp/client.trace");

で:

  • Dはデバッグの略です

  • tはスレッド情報を含むことを意味します

  • oファイルする出力を意味します

  • /tmp/client.traceは、ログファイルへのパスです

2。PhpunitテストでMySqli :: debug()を使用します

データベース関連のテストにphpunitを使用する場合、テストのsetup()またはsetupbeforeclass()メソッドでデバッグを有効にすることができます。このようにして、データベース操作を追跡するのに役立つテストが実行されるたびにデバッグ情報が記録されます。

これが実際の例です。

 use PHPUnit\Framework\TestCase;

class DatabaseTest extends TestCase
{
    private static $mysqli;

    public static function setUpBeforeClass(): void
    {
        // デバッグ出力を有効にします
        mysqli::debug("d:t:o,/tmp/php-mysqli-debug.log");

        self::$mysqli = new mysqli("localhost", "user", "password", "testdb");

        if (self::$mysqli->connect_error) {
            die("接続に失敗しました: " . self::$mysqli->connect_error);
        }
    }

    public function testInsertData()
    {
        $stmt = self::$mysqli->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
        $stmt->bind_param("ss", $name, $email);

        $name = "ユーザーをテストします";
        $email = "test@m66.net";

        $this->assertTrue($stmt->execute());
    }

    public static function tearDownAfterClass(): void
    {
        self::$mysqli->close();
    }
}

3。注意すべきこと

  1. ログファイルの権限:PHPが、 /tmp/ php-mysqli-debug.logなどの指定されたログファイルパスに書き込む権限を持っていることを確認してください。

  2. 生産環境では注意してくださいmysqli :: debug()は、主に開発段階とデバッグ段階で使用されます。機密情報の漏れを避けるために、生産環境でそれを有効にすることは推奨されません。

  3. ファイルのデバッグには多くの内容があります。特に多数のデータベーステストを実行する場合、デバッグファイルはすぐに大きくなる可能性があります。ファイルパスを合理的に計画し、定期的にログをクリーニングしてください。

4。デバッグ結果の分析

/tmp/php-mysqli-debug.logファイルを開いた後、以下を含む詳細なデバッグ情報が表示されます。

  • 各接続の確立と閉鎖

  • クエリステートメント実行ステータス

  • パラメーターのバインディングおよび実行プロセス

  • スレッド情報など。

この情報は、特にテストが失敗したときに問題を見つける場合、PHPプログラムがMySQLとどのように通信するかをより明確に理解するのに役立ちます。

5。概要

MySqli :: Debug()を使用すると、特にデータベースドライバー、ORM、または統合テストを実行する場合は、非常に実用的なデバッグ方法です。データベース関連のテストやデバッグをしている場合は、この方法を試すこともできます。トラブルシューティングの問題を大幅に節約するのに役立ちます。

mysqli :: debug()の使用に関する詳細については、公式のPHPドキュメントを参照してください: https://www.php.net/zh/mysqli.debug.php