Documentation Home

5.4.1 mysql_affected_rows()

my_ulonglong
mysql_affected_rows(MYSQL *mysql)

描述

mysql_affected_rows()可以在使用 mysql_real_query()or 执行语句后立即调用mysql_query()。它返回最后一个语句更改、删除或插入的行数(如果它是UPDATEDELETEINSERT)。对于 SELECT语句, mysql_affected_rows()就像mysql_num_rows().

对于UPDATE语句,默认情况下受影响的行值是实际更改的行数。如果 在连接到mysqldCLIENT_FOUND_ROWS时将标志 指定为,则受影响的行值是找到的行数;也就是说,由子句匹配。 mysql_real_connect()WHERE

对于REPLACE语句,如果新行替换旧行,则 affected-rows 值为 2,因为在这种情况下,删除重复行后插入一行。

对于 INSERT ... ON DUPLICATE KEY UPDATE语句,如果该行作为新行插入,则每行的受影响行值为 1,如果更新现有行,则为 2,如果现有行设置为其当前值,则为 0。如果您指定 CLIENT_FOUND_ROWS标志,并且现有行设置为其当前值,则受影响的行值为 1(而不是 0)。

CALL存储过程的语句之后, mysql_affected_rows()返回它将为过程中执行的最后一条语句返回的值,或者0如果该语句将返回-1。在该过程中,您可以 ROW_COUNT()在 SQL 级别使用它来获取各个语句的 affected-rows 值。

在 MySQL 5.7 中, mysql_affected_rows()为更广泛的语句返回有意义的值。详见 信息函数ROW_COUNT()中 的说明。

返回值

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

因为mysql_affected_rows() 返回一个无符号值,所以您可以通过将返回值与(my_ulonglong)-1(或与 (my_ulonglong)~0,这是等效的)进行比较来检查是否为 -1。

错误

没有任何。

例子

char *stmt = "UPDATE products SET cost=cost*1.25
              WHERE group=10";
mysql_query(&mysql,stmt);
printf("%ld products updated",
       (long) mysql_affected_rows(&mysql));