uint64_t
mysql_affected_rows(MYSQL *mysql)
在執行帶有 mysql_real_query()
或 mysql_query()
的陳述式後,可以立即呼叫 mysql_affected_rows()
。如果最後一個陳述式是 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。