mysql_affected_rows

(PHP 3, PHP 4, PHP 5)

mysql_affected_rows -- 取得前一次 MySQL 動作所影響的記錄行數

說明

int mysql_affected_rows ( [resource link_identifier] )

取得最近一次與 link_identifier 關聯的 INSERT,UPDATE 或 DELETE 查詢所影響的記錄行數。

參數

link_identifier

MySQL 的連線標識符。若果沒有指定,預設使用最後被 mysql_connect() 開啟的連線。若果沒有找到該連線,函數會嘗試呼叫 mysql_connect() 建立連線並使用它。若果發生意外,沒有找到連線或無法建立連線,系統發出 E_WARNING 層級的警示訊息。

返回值

執行成功則返回受影響的行的數目,若果最近一次查詢失敗的話,函數返回 -1。

若果最近一次動作是沒有任何條件(WHERE)的 DELETE 查詢,在表中所有的記錄都會被移除,但本函數返回值在 4.1.2 版之前都為 0。

當使用 UPDATE 查詢,MySQL 不會將原值和新值一樣的列更新。這樣使得 mysql_affected_rows() 函數返回值不一定就是查詢條件所符合的記錄數,只有真正被修改的記錄數才會被返回。

REPLACE 語句首先移除具有相同主鍵的記錄,然後插入一個新記錄。本函數返回的是被移除的記錄數加上被插入的記錄數。

範例

例子 1. mysql_affected_rows() 例子

<?php
$link 
mysql_connect('localhost''mysql_user''mysql_password');
if (!
$link) {
    die(
'Could not connect: ' mysql_error());
}
mysql_select_db('mydb');

/* 本例返回被移除記錄的準確數目 */
mysql_query('DELETE FROM mytable WHERE id < 10');
printf("Records deleted: %d\n"mysql_affected_rows());

/* 對於非真值的 WHERE 子句,應返回 0 */
mysql_query('DELETE FROM mytable WHERE 0');
printf("Records deleted: %d\n"mysql_affected_rows());
?>

上例的輸出類似於:

Records deleted: 10
Records deleted: 0

例子 2. 使用事務處理的 mysql_affected_rows() 例子

<?php
$link 
mysql_connect('localhost''mysql_user''mysql_password');
if (!
$link) {
    die(
'Could not connect: ' mysql_error());
}
mysql_select_db('mydb');

/* Update records */
mysql_query("UPDATE mytable SET used=1 WHERE id < 10");
printf ("Updated records: %d\n"mysql_affected_rows());
mysql_query("COMMIT");
?>

上例的輸出類似於:

Updated Records: 10

注解

事務處理: 若果使用事務處理(transactions),需要在 INSERT,UPDATE 或 DELETE 查詢後呼叫 mysql_affected_rows() 函數,而不是在 COMMIT 指令之後。

SELECT 語句: 要取得 SELECT 所返回的行數,可以用 mysql_num_rows()