PHP Conference Japan 2024

mysqli_stmt::$affected_rows

mysqli_stmt_affected_rows

(PHP 5, PHP 7, PHP 8)

mysqli_stmt::$affected_rows -- mysqli_stmt_affected_rows返回最后执行语句更改、删除、插入或匹配的行总数

描述

面向对象风格

过程化风格

mysqli_stmt_affected_rows(mysqli_stmt $statement): int|string

返回受 INSERTUPDATEDELETE 查询影响的行数。对于 SELECT 语句,其功能类似于 mysqli_stmt_num_rows()

参数

statement

仅过程化风格:由 mysqli_stmt_init() 返回的 mysqli_stmt 对象。

返回值

大于零的整数表示受影响或检索到的行数。零表示 UPDATE 语句没有更新任何记录,查询中的 WHERE 子句没有匹配任何行,或者尚未执行任何查询。-1 表示查询返回错误,或者对于 SELECT 查询,在调用 mysqli_stmt_store_result() 之前调用了 mysqli_stmt_affected_rows()

注意:

如果受影响的行数大于 PHP 整数的最大值,则受影响的行数将作为字符串值返回。

示例

示例 #1 mysqli_stmt_affected_rows() 示例

面向对象风格

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* 创建临时表 */
$mysqli->query("CREATE TEMPORARY TABLE myCountry LIKE Country");

$query = "INSERT INTO myCountry SELECT * FROM Country WHERE Code LIKE ?";

/* 准备语句 */
$stmt = $mysqli->prepare($query);

/* 为占位符绑定变量 */
$code = 'A%';
$stmt->bind_param("s", $code);

/* 执行语句 */
$stmt->execute();

printf("插入的行数:%d\n", $stmt->affected_rows);

过程化风格

<?php

mysqli_report
(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$link = mysqli_connect("localhost", "my_user", "my_password", "world");

/* 创建临时表 */
mysqli_query($link, "CREATE TEMPORARY TABLE myCountry LIKE Country");

$query = "INSERT INTO myCountry SELECT * FROM Country WHERE Code LIKE ?";

/* 准备语句 */
$stmt = mysqli_prepare($link, $query);

/* 为占位符绑定变量 */
$code = 'A%';
mysqli_stmt_bind_param($stmt, "s", $code);

/* 执行语句 */
mysqli_stmt_execute($stmt);

printf("插入的行数:%d\n", mysqli_stmt_affected_rows($stmt));

以上示例将输出

Rows inserted: 17

参见

添加注释

用户贡献的注释 1 条注释

30
Carl Olsen
18 年前
似乎包含与数据库中已存在数据相同数据的 UPDATE 预处理语句会为 affected_rows 返回 0。我预计它会返回 1,但它必须将输入值与现有值进行比较,并确定没有发生 UPDATE 操作。
To Top