文件首頁
MySQL 8.4 C API 開發者指南
下載本手冊
PDF (US Ltr) - 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 時,為 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。

錯誤

無。

範例

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