文件首頁
MySQL 9.0 C API 開發人員指南
下載本手冊
PDF (美式信紙) - 1.4Mb
PDF (A4) - 1.4Mb


5.4.1 mysql_affected_rows()

uint64_t
mysql_affected_rows(MYSQL *mysql)

說明

在執行帶有 mysql_real_query()mysql_query() 的陳述式後,可以立即呼叫 mysql_affected_rows()。如果最後一個陳述式是 UPDATEDELETEINSERT,則會傳回最後一個陳述式所變更、刪除或插入的列數。對於 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。

錯誤

無。

範例

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));