(PHP 4, PHP 5)
mysql_affected_rows — 获取先前 MySQL 操作中受影响的行数
此扩展在 PHP 5.5.0 中已弃用,并在 PHP 7.0.0 中被移除。应改为使用 MySQLi 或 PDO_MySQL 扩展。另请参见 MySQL:选择 API 指南。此函数的替代方法包括
获取与 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 隐式影响的行。