現在の位置: ホーム> 最新記事一覧> mysqli :: $ Iffected_Rows

mysqli :: $ Iffected_Rows

gitbox 2025-05-28

データベース操作にPHPのMySQLI拡張機能を使用する場合、 Multi_Query関数を使用すると、複数のSQLステートメントを一度に実行できます。これは、データをバッチするときに非常に便利です。ただし、複数のステートメントを実行した後、影響を受ける行数(影響を受ける_rows )を正しく取得する方法が一般的な質問になりました。

この記事では、 mysqli :: $ hiffected_rows属性を組み合わせて、それを正しく使用する方法と、 multi_queryシナリオで注意する必要がある問題を説明します。


1. mysqliの基本的な使用:: $ rifected_rows

mysqli :: $ rifected_rowsはmysqliオブジェクトの属性であり、挿入更新、または削除ステートメントの最新の実行の影響を受ける行の数を示します。単一のSQLステートメントは、実行するのが非常に直感的です。

 $mysqli = new mysqli('gitbox.net', 'user', 'password', 'database');
$mysqli->query("UPDATE users SET status=1 WHERE last_login > NOW() - INTERVAL 30 DAY");
echo "影響を受ける行の数: " . $mysqli->affected_rows;

このアップデートステートメントを実行した後、影響を受けた_rowsは影響を受ける行の数です。


2。Multi_Queryriffected_rowsの関係

Multi_Queryを使用すると、複数のSQLステートメントを一度に実行できます。

 $sql = "UPDATE users SET status=1 WHERE id=1;";
$sql .= "UPDATE users SET status=2 WHERE id=2;";
$mysqli->multi_query($sql);

しかし、現時点では、影響を受けた_rowsの価値はどうなりますか?答えは次のとおりです。影響を受けた_rowsは、現在処理中の結果セットに対応する影響を受ける行の数のみを反映しています。 Multi_Queryは各ステートメントの結果をループする必要があるため、1つずつ取得する必要があります。


3. multi_queryの各ステートメントの罹患_rowsを正しく取得します

サンプルコード:

 $mysqli = new mysqli('gitbox.net', 'user', 'password', 'database');

$sql = "UPDATE users SET status=1 WHERE id=1;";
$sql .= "UPDATE users SET status=2 WHERE id=2;";
$sql .= "DELETE FROM logs WHERE created_at < NOW() - INTERVAL 30 DAY;";

if ($mysqli->multi_query($sql)) {
    do {
        // 現在の結果の影響を受ける行の数を取得する
        echo "影響を受ける行の数: " . $mysqli->affected_rows . "\n";

        // 次の結果を処理する準備をします
    } while ($mysqli->more_results() && $mysqli->next_result());
} else {
    echo "実行に失敗しました: " . $mysqli->error;
}

ここでは、doを使用します。一方、ループはステートメントを1つずつ処理します。各実行の後、現在の影響を受けた_rowsを読み取り、各ステートメントの影響を受ける行の数を正確に取得します。


4. riffected_rowsを使用する場合に注意を払ういくつかの問題

  1. Multi_Queryを使用してnext_result()と協力する必要がありますnext_result()に電話しない場合、最初のステートメントのhiffected_rowsのみを取得でき、その後のステートメントは無視されます。

  2. いくつかのステートメントは行の数に影響しない場合があります<br> たとえば、 Selectステートメントは-1を返します。データを変更するステートメントに対してのみ有効です。

  3. エラーが発生すると、影響を受けた_rowsが-1になる場合があります
    SQLステートメントが実行に失敗した場合、 rifected_rows-1を返します。この時点で、 $ mysqli->エラーを介してエラーメッセージを取得する必要があります。

  4. トランザクションを処理するときは、一貫性に注意してください<br> トランザクションで複数のステートメントが実行された場合、単一のステートメントの影響を受けた_rowsは、トランザクションの全体的な最終状態を保証することができず、トランザクションのコミットとロールバックに基づいて制御する必要があります。


5。概要

  • Multi_Queryが複数のSQLSを実行する場合、ループを使用してnext_result()と協力してすべての結果をトラバースする必要があります。

  • 各ステートメントが実行された後、影響を受けた_rowsは現在のステートメントの影響を受ける行の数です。

  • エラーステータスの検出と、影響を受けた_rowsへの特別なステートメントの返品値に注意してください。

  • トランザクションを操作する場合、影響を受ける行の数は補助的な判断にすぎず、最終状態はトランザクションコミット結果の対象となります。

上記のポイントを習得することにより、 MySqli :: $ hiffected_RowsおよびMulti_Queryを正しく効率的に使用して、複数のSQL実行と結果処理を実行できます。