mysql_affected_rows

(PHP 4, PHP 5)

mysql_affected_rows获取先前 MySQL 操作中受影响的行数

警告

此扩展在 PHP 5.5.0 中已弃用,并在 PHP 7.0.0 中被移除。应改为使用 MySQLiPDO_MySQL 扩展。另请参见 MySQL:选择 API 指南。此函数的替代方法包括

描述

mysql_affected_rows(resource $link_identifier = NULL): int

获取与 link_identifier 关联的最后一个 INSERT、UPDATE、REPLACE 或 DELETE 查询所影响的行数。

参数

link_identifier

MySQL 连接。如果未指定链接标识符,则假定为 mysql_connect() 最近打开的链接。如果未找到此类链接,它将尝试创建一个链接,就像 mysql_connect() 被调用时没有参数一样。如果未找到或建立连接,则会生成 E_WARNING 级别错误。

返回值

成功时返回受影响的行数,如果最后一次查询失败则返回 -1。

如果最后一次查询是 DELETE 查询且没有 WHERE 子句,则所有记录将从表中删除,但此函数在 MySQL 4.1.2 之前的版本中将返回零。

使用 UPDATE 时,MySQL 不会更新新值与旧值相同的值的列。这会造成 mysql_affected_rows() 可能实际上并不等于匹配的行数,而只等于查询实际影响的行数。

REPLACE 语句首先删除具有相同主键的记录,然后插入新记录。此函数返回已删除的记录数加上插入的记录数。

对于 "INSERT ... ON DUPLICATE KEY UPDATE" 查询,如果执行了插入操作,返回值将为 1,对于现有行的更新则为 2

示例

示例 #1 mysql_affected_rows() 示例

<?php
$link
= mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!
$link) {
die(
'无法连接:' . mysql_error());
}
mysql_select_db('mydb');

/* 这应该返回已删除记录的正确数量 */
mysql_query('DELETE FROM mytable WHERE id < 10');
printf("已删除记录:%d\n", mysql_affected_rows());

/* 使用永远不为真的 WHERE 子句,它应该返回 0 */
mysql_query('DELETE FROM mytable WHERE 0');
printf("已删除记录:%d\n", mysql_affected_rows());
?>

上面的示例将输出类似于以下内容

Records deleted: 10
Records deleted: 0

示例 #2 使用事务的 mysql_affected_rows() 示例

<?php
$link
= mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!
$link) {
die(
'无法连接:' . mysql_error());
}
mysql_select_db('mydb');

/* 更新记录 */
mysql_query("UPDATE mytable SET used=1 WHERE id < 10");
printf ("已更新记录:%d\n", mysql_affected_rows());
mysql_query("COMMIT");
?>

上面的示例将输出类似于以下内容

Updated Records: 10

注释

注意: 事务

如果您正在使用事务,您需要在您的 INSERT、UPDATE 或 DELETE 查询之后调用 mysql_affected_rows(),而不是在 COMMIT 之后。

注意: SELECT 语句

要检索 SELECT 返回的行数,可以使用 mysql_num_rows()

注意: 级联外键

mysql_affected_rows() 不会计算通过在外部键约束中使用 ON DELETE CASCADE 和/或 ON UPDATE CASCADE 隐式影响的行。

参见

添加注释

用户贡献的注释

此页面没有用户贡献的注释。
To Top