27.7.6.1 mysql_affected_rows()

my_ulonglong mysql_affected_rows(MYSQL *mysql)

Description

使用mysql_query()mysql_real_query()执行语句后,可以立即调用mysql_affected_rows()。如果它是UPDATEDELETEINSERT,则返回最后一条语句更改,删除或插入的行数。对于SELECT语句,mysql_affected_rows()的作用类似于mysql_num_rows()

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

对于REPLACE语句,如果新行替换了旧行,则受影响的行值为 2,因为在这种情况下,删除重复项后将插入一行。

对于插入...在重复的密钥更新上语句,如果将行作为新行插入,则每行的受影响行值为 1;如果更新了现有行,则为 2;如果将现有行设置为其当前值,则为 0.如果指定CLIENT_FOUND_ROWS标志,则将现有行设置为其当前值时,受影响的行值为 1(而不是 0)。

在针对存储过程的CALL语句之后,mysql_affected_rows()返回将为该过程中最后执行的语句返回的值,如果该语句返回-1则返回0。在该过程中,可以在 SQL 级别上使用ROW_COUNT()来获取单个语句的受影响行值。

在 MySQL 5.7 中,mysql_affected_rows()为更广泛的语句返回有意义的值。有关详细信息,请参见第 12.15 节“信息功能”中对ROW_COUNT()的描述。

Return Values

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

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

Errors

None.

Example
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));
首页