(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。
如果上次查询是没有任何 WHERE 子句的 DELETE 查询,则所有记录都将从表中删除,但对于 4.1.2 之前的 MySQL 版本,此函数将返回零。
使用 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 隐式影响的行数。