my_ulonglong mysql_affected_rows(MYSQL
*mysql)
Description
After executing a statement with
mysql_query()
or
mysql_real_query()
, returns the
number of rows changed (for
UPDATE
), deleted (for
DELETE
), or inserted (for
INSERT
). For
SELECT
statements,
mysql_affected_rows()
works like
mysql_num_rows()
.
Return Values
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).
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));
For UPDATE
statements, if you
specify the CLIENT_FOUND_ROWS
flag when
connecting to mysqld,
mysql_affected_rows()
returns
the number of rows matched by the WHERE
clause. Otherwise, the default behavior is to return the number
of rows actually changed.
Note that when you use a REPLACE
command, mysql_affected_rows()
returns 2 if the new row replaced an old row, because in this
case, one row was inserted after the duplicate was deleted.
If you use
INSERT ...
ON DUPLICATE KEY UPDATE
to insert a row,
mysql_affected_rows()
returns 1
if the row is inserted as a new row and 2 if an existing row is
updated.
mysql_affected_rows()
returns
0
following a
CALL
statement for a stored
procedure that contains a statement that modifies rows because
in this case mysql_insert_id()
applies to CALL
and not the
statement within the procedure. Within the procedure, you can
use ROW_COUNT()
at the SQL level
to obtain the AUTO_INCREMENT
value.
User Comments
Add your own comment.