uint64_t
mysql_affected_rows(MYSQL *mysql)
mysql_affected_rows()
可以在使用 mysql_real_query()
或 mysql_query()
执行语句后立即调用。如果语句是 UPDATE
、DELETE
或 INSERT
,则返回更改、删除或插入的行数。对于 SELECT
语句,mysql_affected_rows()
的作用类似于 mysql_num_rows()
。
对于 UPDATE
语句,默认情况下,受影响的行数是实际更改的行数。如果您在连接到 mysqld 时,将 CLIENT_FOUND_ROWS
标志指定给 mysql_real_connect()
,则受影响的行数是 “找到” 的行数;也就是说,与 WHERE
子句匹配的行数。
对于 REPLACE
语句,如果新行替换了旧行,则受影响的行数为 2,因为在这种情况下,在删除重复项后插入了一行。
对于 INSERT ... ON DUPLICATE KEY UPDATE
语句,如果行作为新行插入,则每行的受影响的行数为 1;如果更新了现有行,则为 2;如果现有行设置为其当前值,则为 0。如果您指定了 CLIENT_FOUND_ROWS
标志,则如果现有行设置为其当前值,则受影响的行数为 1(而不是 0)。
在执行存储过程的 CALL
语句之后,mysql_affected_rows()
返回它将为在过程内执行的最后一条语句返回的值,或者如果该语句将返回 -1
,则返回 0
。在过程中,您可以在 SQL 级别使用 ROW_COUNT()
来获取单个语句的受影响的行数。
mysql_affected_rows()
为各种语句返回有意义的值。有关详细信息,请参阅 信息函数 中 ROW_COUNT()
的描述。
大于零的整数表示受影响或检索的行数。零表示 UPDATE
语句没有更新任何记录,查询中没有行匹配 WHERE
子句,或者尚未执行任何查询。-1 表示查询返回错误,或者对于 SELECT
查询,在调用 mysql_store_result()
之前调用了 mysql_affected_rows()
。
由于 mysql_affected_rows()
返回无符号值,因此您可以通过将返回值与 (uint64_t)-1
(或等效的 (uint64_t)~0
)进行比较来检查 -1。