PHP MySQLi 函数

PHP mysqli_stmt::$affected_rows / mysqli_stmt_affected_rows() 函数返回受上次 SELECT 影响的行数, INSERT、UPDATE 或 DELETE 查询。

语法

//面向对象风格
$mysqli_stmt->affected_rows;

//面向过程风格
mysqli_stmt_affected_rows(statement)

参数

statement 必填。 仅适用于面向过程风格:指定 mysqli_stmt_init() 返回的 mysqli_stmt 对象。

返回值

返回整数可以解释如下:

  • 大于零的整数表示受影响或检索的行数。
  • 零表示 UPDATE 语句没有更新任何记录,没有行与查询中的 WHERE 子句匹配,或者尚未执行任何查询。
  • -1 表示查询返回错误,或者对于 SELECT 查询,在调用 mysqli_stmt_store_result 之前调用此函数()。
注意:如果受影响的行数大于最大int值(PHP_INT_MAX),则受影响的行数将以字符串形式返回。

示例:面向对象风格

下面的示例显示了mysqli_stmt::$affected_rows属性的用法。

<?php
//建立与数据库的连接
$mysqli = new mysqli("localhost", "user", "password", "database");
if ($mysqli->connect_affected_rows) {
  echo "Failed to connect to MySQL: ". $mysqli->connect_error;
  exit();
}

//执行select语句,将结果存储在
//内部缓冲区并显示受影响的行
$stmt = $mysqli->prepare("SELECT * FROM Employee");
$stmt->execute();
$stmt->store_result();
echo "Affected rows (SELECT): ". $stmt->affected_rows;

//执行删除语句并显示受影响的行
$stmt = $mysqli->prepare("DELETE FROM Employee WHERE Age>60");
$stmt->execute();
echo "Affected rows (DELETE): ". $stmt->affected_rows;

//关闭连接
$mysqli->close();
?>

上述代码的输出将类似于:

Affected rows (SELECT): 478
Affected rows (DELETE): 13

示例:面向过程风格

下面的示例显示mysqli_stmt_affected_rows()的用法 函数。

<?php
//建立与数据库的连接
$mysqli = mysqli_connect("localhost", "user", "password", "database");
if (mysqli_connect_affected_rows()) {
  echo "Failed to connect to MySQL: ". mysqli_connect_error();
  exit();
}

//执行select语句,将结果存储在
//内部缓冲区并显示受影响的行
$stmt = mysqli_prepare($mysqli, "SELECT * FROM Employee");
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
echo "Affected rows (SELECT): ". mysqli_stmt_affected_rows($stmt);

//执行删除语句并显示受影响的行
$stmt = mysqli_prepare($mysqli, "DELETE FROM Employee WHERE Age>60");
mysqli_stmt_execute($stmt);
echo "Affected rows (DELETE): ". mysqli_stmt_affected_rows($stmt);

//关闭连接
mysqli_close($mysqli);
?>

上述代码的输出将类似于:

Affected rows (SELECT): 478
Affected rows (DELETE): 13