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 時,為 mysql_real_connect()
指定了 CLIENT_FOUND_ROWS
旗標,則受影響的列數值是 「找到」 的列數;也就是說,與 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_affected_rows()
是在呼叫 mysql_store_result()
之前呼叫。
因為 mysql_affected_rows()
會傳回不帶正負號的值,因此您可以透過將傳回值與 (uint64_t)-1
(或與 (uint64_t)~0
,這兩者等效)進行比較,來檢查 -1。