English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
mysqli_stmt_affected_rows()関数は最も最近実行された文で変更、削除、または挿入された行の合計数を返します。
mysqli_stmt_affected_rows()関数は最も最近実行された文が影響(変更、削除、挿入)した行数を返します。
INSERT、UPDATEまたはDELETE文の後にこの関数を呼び出すことでのみ、この関数が正常に動作します。SELECTクエリで影響を受けた行数を知りたい場合は、 mysqli_stmt_num_rows() 関数。
mysqli_stmt_affected_rows($stmt)
番号 | パラメータ及び説明 |
---|---|
1 | stmt(必須) これはSQLクエリを実行する文のオブジェクトを表します。 |
PHP mysqli_stmt_affected_rows()関数は、先に(INSERT、UPDATE、REPLACEまたはDELETE)操作で影響を受けた行数を示す整数値を返します。
もし文にエラーがあれば、この関数は-1影響を受けた行がない場合、この関数は0。
この関数は最初にPHPバージョンで使用されていました5中に導入されており、すべての上位バージョンで使用できます。
仮にMySQLデータベースにemployeeという名前のテーブルが作成されており、以下の内容になっていると仮定します:
mysql> select * from employee; +------------+--------------+------+------+--------+ | FIRST_NAME | LAST_NAME | AGE | SEX | INCOME | +------------+--------------+------+------+--------+ | Vinay | Bhattacharya | 20 | M | 21000 | | Sharukh | Sheik | 25 | M | 23300 | | Trupthi | Mishra | 24 | F | 51000 | | Sheldon | Cooper | 25 | M | 2256 | | Sarmista | Sharma | 28 | F | 15000 | +------------+--------------+------+------+--------+ 5 rows in set (0.00 sec)
以下の例では、mysqli_stmt_affected_rows()関数の使用法(手続き型スタイル)は、データを更新するupdateを実行した後、影響を受けた行数を返します:
<?php $con = mysqli_connect("localhost", "root", "password", "mydb"); $stmt = mysqli_prepare($con, "UPDATE employee set INCOME=INCOME-? where INCOME>=? "); mysqli_stmt_bind_param($stmt, "si", $reduct, $limit); $limit = 20000; $reduct = 5000; //ステートメントを実行 mysqli_stmt_execute($stmt); print("更新されたレコード......\n"); //影響を受けた行 $count = mysqli_stmt_affected_rows($stmt); //ステートメントを終了 mysqli_stmt_close($stmt); //接続を閉じる mysqli_close($con); print("影響を受けた行 \ ?>
結果の出力
更新されたレコード...... 影響を受けた行 3
オブジェクト指向スタイルでは、この関数の構文は以下の通りです$con-> affected_rows;。以下は、オブジェクト指向スタイルでのこの関数の例です。データを削除するdeleteを実行した後、影響を受けた行数を返します:
<?php //接続を確立する $con = new mysqli("localhost", "root", "password", "mydb"); $con -> query("CREATE TABLE Test(Name VARCHAR(255), AGE INT"); print("テーブルの作成.....\n"); $con -> query("insert into Test values('Raju', 25),('Rahman', 30),('Sarmista', 27); print("レコードを挿入.....\n"); $stmt = $con -> prepare("DELETE FROM Test WHERE Name in(?, ?)"); $stmt -> bind_param("ss", $name1, $name2); $name1 ='Raju'; $name2 ='Rahman'; print("レコードが削除されました.....\n"); //ステートメントを実行 $stmt->execute(); //影響を受けた行 $count = $stmt ->affected_rows; print("影響を受けた行数 ").$count; //ステートメントを終了 $stmt->close(); //接続を閉じる $con->close(); ?>
結果の出力
テーブルの作成..... レコードを挿入..... レコードが削除されました..... 影響を受けた行数 2
クエリが行わない行に影響を与えない場合、その返値を確認しましょう-
<?php $con = @mysqli_connect("localhost", "root", "password", "mydb"); mysqli_query($con, "CREATE TABLE Test(Name VARCHAR(255), AGE INT"); print("テーブルの作成.....\n"); mysqli_query($con, "insert into Test values('Raju', 25),('Rahman', 30),('Sarmista', 27); print("レコードを挿入.....\n"); $stmt = mysqli_prepare($con, "DELETE FROM test WHERE Age<?"); mysqli_stmt_bind_param($stmt, "i", $num); $num = 8; //ステートメントを実行 mysqli_stmt_execute($stmt); //影響を受けた行 $count = mysqli_stmt_affected_rows($stmt); print("影響を受けた行数(クエリが何も行わない場合): ").$count; //ステートメントを終了 mysqli_stmt_close($stmt); //接続を閉じる mysqli_close($con); ?>
結果の出力
テーブルの作成..... レコードを挿入..... 影響を受けた行数(クエリが何も行わない場合): 0