現在の位置: ホーム> 最新記事一覧> PHPユニットテストでMySQLI_STMT :: $エラー情報をキャプチャする方法

PHPユニットテストでMySQLI_STMT :: $エラー情報をキャプチャする方法

gitbox 2025-05-28

PHP開発では、特にデータベース操作を処理する場合は、エラー情報をキャプチャして処理することが重要です。特にMySQLデータベースを使用する場合、 MySQLI_STMT :: $エラーは、 SQLクエリエラーを取得するために使用されるプロパティです。開発者がタイムリーに問題を発見して解決するのに役立ちます。ユニットテスト環境では、それを使用してエラー情報をキャプチャおよび処理することもできます。これにより、データベース操作のデバッグ効率と最適化効率が改善されます。

この記事では、 MySQLI_STMT :: $エラーメッセージをPHPユニットテストでキャプチャする方法を紹介し、いくつかのデバッグのヒントを提供します。

1.単体テストでmysqli_stmt :: $エラーを使用します

まず、データベース接続を作成し、SQLクエリを実行する必要があります。データベース操作を実行するとき、エラーが発生した場合、 mysqli_stmt :: $エラーはエラーメッセージを保存します。 Mysqli_stmt :: $エラーをキャプチャして処理する方法を示す簡単な例を以下に示します。

 <?php
// 確立したとしますMySQLi接続する
$mysqli = new mysqli("localhost", "user", "password", "database");

// 检查接続する是否成功
if ($mysqli->connect_error) {
    die("接続する失败: " . $mysqli->connect_error);
}

// 準備するSQLクエリステートメント
$sql = "SELECT * FROM nonexistent_table"; // 意図的に間違ったクエリ

// 前処理ステートメント
$stmt = $mysqli->prepare($sql);

if ($stmt === false) {
    // 前処理が失敗した場合,キャッチエラー
    echo "前処理ステートメント错误: " . $mysqli->error;
} else {
    // クエリを実行します
    $stmt->execute();

    // 実行結果を確認してください
    if ($stmt->errno) {
        // エラーメッセージをキャプチャして出力します
        echo "実行エラー: " . $stmt->error;
    } else {
        echo "クエリが成功しました";
    }
}

// 关闭接続する
$stmt->close();
$mysqli->close();
?>

この例では、存在しない存在しない存在しないテーブル名を意図的に使用したため、クエリが失敗します。 mysqli_stmt :: $ errormysqli_stmt :: $ errnoをチェックすることにより、エラーメッセージをキャプチャしてデバッグできます。

2。単体テストでのエラーキャプチャ

ユニットテスト環境では、PHPunitフレームワークを使用してテストできます。 mysqli_stmt :: $エラーメッセージをキャプチャするには、phpunitのアサーション方法を使用できます。これが基本的な単体テストの例です。

 <?php
use PHPUnit\Framework\TestCase;

class DatabaseTest extends TestCase
{
    private $mysqli;

    protected function setUp(): void
    {
        // 设置数据库接続する
        $this->mysqli = new mysqli("localhost", "user", "password", "database");
    }

    public function testQueryExecutionError()
    {
        // 意図的に誤ったクエリを書く
        $sql = "SELECT * FROM nonexistent_table";
        $stmt = $this->mysqli->prepare($sql);

        // 确保前処理ステートメント没有错误
        $this->assertFalse($stmt === false, "前処理ステートメント失败: " . $this->mysqli->error);

        // クエリを実行します
        $stmt->execute();

        // 実行が成功したかどうかを確認してください
        $this->assertEquals(0, $stmt->errno, "クエリの実行に失敗しました: " . $stmt->error);
    }

    protected function tearDown(): void
    {
        // 关闭数据库接続する
        $this->mysqli->close();
    }
}
?>

この単体テストでは、誤ったクエリを意図的に使用して、障害のあるデータベース操作をシミュレートしました。 $ this-> assertfalseおよび$ this-> assertequalsメソッドは、SQLクエリが正常に実行されていることを確認するために使用されます。エラーが発生した場合、対応するエラーメッセージを出力してデバッグを支援します。

3.エラーメッセージとログログをキャプチャします

エラー情報の直接出力に加えて、生産環境では、後で表示するためにログにエラー情報を記録することもできます。次の例は、mysqli_stmt :: $ $エラー情報をログファイルに記録する方法を示しています。

 <?php
// 確立したとしますMySQLi接続する
$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_error) {
    die("接続する失败: " . $mysqli->connect_error);
}

$sql = "SELECT * FROM nonexistent_table";
$stmt = $mysqli->prepare($sql);

if ($stmt === false) {
    error_log("前処理ステートメント错误: " . $mysqli->error, 3, "/var/log/mysql_errors.log");
} else {
    $stmt->execute();

    if ($stmt->errno) {
        error_log("実行エラー: " . $stmt->error, 3, "/var/log/mysql_errors.log");
    }
}

$stmt->close();
$mysqli->close();
?>

この例では、 ERROR_LOG関数を使用して、ERROR情報を/var/log/mysql_errors.logファイルにログに記録します。このようにして、エラー情報が失われず、分析後も便利に実行できるようにすることができます。

要約します

MySQLI_STMT :: $ ERRORを使用してエラーメッセージをキャプチャおよび処理することにより、開発者はデータベース操作をより簡単にデバッグおよび最適化できます。 PHPユニットテストでは、PHPunitフレームワークを使用してエラーをキャッチし、コードの堅牢性をさらに改善するためにアサーションを作成できます。さらに、ロギングは、潜在的な問題を追跡および解決するのに役立つ良い実践でもあります。

PHPを介してより堅牢なデータベース操作コードを書きたい場合は、必ずこれらのヒントを学んでください!