<?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を返す必要があり、行が挿入されていることを示します。
原因:挿入物を実行している場合...重複キーアップデートステートメントで実際にデータを更新しない場合、 $ rifected_rowsはmysqlバージョンに応じて2または0を返す場合があります。
説明:
MySQL 5.1以前では、重複したキーアップデートの影響を受ける行の数は1(挿入)または2(更新)です。
MySQL 5.7の後、実際にデータが更新されない場合、0は返されます。
解決する:
詳細については、 $ mysqli->情報を確認するか、ニーズに応じてロジックを調整できます。
<?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つずつ処理する必要があります。
$ rifected_rowsは、書き込み操作(挿入、更新、削除)に対してのみ有効です。 Selectステートメントは行カウントに影響を与えず、-1を返します。
選択したクエリが返される結果を知りたい場合は、 $ result-> num_rowsを使用する必要があります。
トランザクションがコミットされていない:トランザクションが有効になり、コミットされていない場合、 $の影響を受けた_rowsは影響を受ける実際の行数を依然として反映していますが、データはデータベースにコミットしていません。
トリガーインパクト:MySQLトリガー実行中の行の変更は、PHPの$ rifected_rowsの値を変更しません。
接続ステータス:mysqli接続が正常であることを確認してください。
$ mysqli->エラーを使用して、SQLエラーを確認します。
$ mysqli->情報を使用して、最近実行されたステートメントの詳細を表示します。
MySQLログをオンにするか、ツールを使用して、実行されたSQLが予想されるものと一致しているかどうかを確認します。
mysqli :: $ hiblected_rowsは、書き込み操作に影響を与える行の数を検出するための効果的なツールですが、次の状況では簡単に混乱するのは簡単です。
複雑なSQL(重複キーアップデートなど)を使用する場合、返品値ルールに特別な注意を払う必要があります。
複数のSQLバッチが実行されると、結果を1つずつ処理する必要があります。
Selectステートメントは行の数に影響しません。代わりに$ result-> num_rowsを使用します。
トランザクション、トリガーなども、実際のパフォーマンスに影響を与える可能性があります。
その動作の原則と境界条件を理解している限り、 $の影響を受けた_rowsは、データベースの操作効果を正確に判断し、コードの堅牢性を向上させるのに役立ちます。