English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

PHP基本教程

PHP上級教程

PHP & MySQL

PHPリファレンスマニュアル

PHP mysqli_stmt_affected_rows()関数の用法と例

PHP MySQLi 参考マニュアル

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バージョン

この関数は最初に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

PHP MySQLi 参考マニュアル