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

mysqli :: $ sheftected_rows

gitbox 2025-05-26

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

 <?php
$mysqli = new mysqli("gitbox.net", "username", "password", "database");

$sql = "INSERT INTO users (username, email) VALUES ('testuser', '[email protected]')";
$mysqli->query($sql);

echo "影響を受ける行の数:" . $mysqli->affected_rows;
?>

上記のコードでは、新しいデータが挿入され、 $ rifected_rowsが1を返す必要があり、行が挿入されていることを示します。


2。一般的な誤解と解決策

誤解1:データを挿入した後に0を返すと、明らかに成功します

  • 原因挿入物を実行している場合...重複キーアップデートステートメントで実際にデータを更新しない場合、 $ rifected_rowsはmysqlバージョンに応じて2または0を返す場合があります。

  • 説明

    • MySQL 5.1以前では、重複したキーアップデートの影響を受ける行の数は1(挿入)または2(更新)です。

    • MySQL 5.7の後、実際にデータが更新されない場合、0は返されます。

  • 解決する

    • 詳細については、 $ mysqli->情報を確認するか、ニーズに応じてロジックを調整できます。

誤解2:複数のSQLSを実行すると、影響を受ける行の数が不正確です

<?php
$sql = "INSERT INTO users (username) VALUES ('user1');";
$sql .= "INSERT INTO users (username) VALUES ('user2');";

$mysqli->multi_query($sql);
do {
    if ($result = $mysqli->store_result()) {
        $result->free();
    }
    echo "影響を受ける行の数:" . $mysqli->affected_rows . "\n";
} while ($mysqli->more_results() && $mysqli->next_result());
?>
  • $ Iffected_Rowsは、前回実行されたクエリです。バッチで複数のステートメントを実行する場合、各ステートメントの影響を受ける行の数を正確に取得するには、結果を1つずつ処理する必要があります。

誤解3: $ Iffected_Rowsは、選択されたステートメントに対して無効です

  • $ rifected_rowsは、書き込み操作(挿入、更新、削除)に対してのみ有効です。 Selectステートメントは行カウントに影響を与えず、-1を返します。

  • 選択したクエリが返される結果を知りたい場合は、 $ result-> num_rowsを使用する必要があります。


3。 $ hiblected_rowsに影響を与える他の要因

  • トランザクションがコミットされていない:トランザクションが有効になり、コミットされていない場合、 $の影響を受けた_rowsは影響を受ける実際の行数を依然として反映していますが、データはデータベースにコミットしていません。

  • トリガーインパクト:MySQLトリガー実行中の行の変更は、PHPの$ rifected_rowsの値を変更しません。

  • 接続ステータス:mysqli接続正常であることを確認してください。


4.推奨されるデバッグスキル

  • $ mysqli->エラーを使用して、SQLエラーを確認します。

  • $ mysqli->情報を使用して、最近実行されたステートメントの詳細を表示します。

  • MySQLログをオンにするか、ツールを使用して、実行されたSQLが予想されるものと一致しているかどうかを確認します。


5。概要

mysqli :: $ hiblected_rowsは、書き込み操作に影響を与える行の数を検出するための効果的なツールですが、次の状況では簡単に混乱するのは簡単です。

  • 複雑なSQL(重複キーアップデートなど)を使用する場合、返品値ルールに特別な注意を払う必要があります。

  • 複数のSQLバッチが実行されると、結果を1つずつ処理する必要があります。

  • Selectステートメントは行の数に影響しません。代わりに$ result-> num_rowsを使用します。

  • トランザクション、トリガーなども、実際のパフォーマンスに影響を与える可能性があります。

その動作の原則と境界条件を理解している限り、 $の影響を受けた_rowsは、データベースの操作効果を正確に判断し、コードの堅牢性を向上させるのに役立ちます。