Spec-Zone .ru
спецификации, руководства, описания, API
|
my_ulonglong mysql_affected_rows(MYSQL *mysql)
mysql_affected_rows()
may be called immediately after executing a statement with
mysql_query()
or mysql_real_query()
. It returns the number of rows changed, deleted, or
inserted by the last statement if it was an UPDATE
, DELETE
,
or INSERT
. For SELECT
statements, mysql_affected_rows()
works like mysql_num_rows()
.
For UPDATE
statements, the affected-rows value by default is the number of rows
actually changed. If you specify the CLIENT_FOUND_ROWS
flag to mysql_real_connect()
when connecting to mysqld, the affected-rows value is the number of rows "found"; that is, matched by the WHERE
clause.
For REPLACE
statements, the affected-rows value is 2 if the new row replaced an old
row, because in this case, one row was inserted after the duplicate was deleted.
For INSERT ... ON DUPLICATE
KEY UPDATE
statements, the affected-rows value per row is 1 if the row is inserted as a new row, 2 if
an existing row is updated, and 0 if an existing row is set to its current values. If you specify the CLIENT_FOUND_ROWS
flag, the affected-rows value is 1 (not 0) if an existing row
is set to its current values.
Following a CALL
statement for a stored procedure, mysql_affected_rows()
returns the value that it would return for the last
statement executed within the procedure, or 0
if that statement would return -1
. Within the procedure, you can use ROW_COUNT()
at the SQL level to obtain the affected-rows value for individual
statements.
In MySQL 5.6, mysql_affected_rows()
returns a meaningful value for a wider range of statements. For details, see the description for ROW_COUNT()
in Section 12.14,
"Information Functions".
An integer greater than zero indicates the number of rows affected or retrieved. Zero indicates that no records
were updated for an UPDATE
statement, no rows matched the WHERE
clause in the query or that no query has yet been executed. -1 indicates that the query returned an error or
that, for a SELECT
query, mysql_affected_rows()
was
called prior to calling mysql_store_result()
.
Because mysql_affected_rows()
returns an unsigned value, you can check for -1 by
comparing the return value to (my_ulonglong)-1
(or to (my_ulonglong)~0
,
which is equivalent).
None.
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));