(PHP 4, PHP 5)
mysql_affected_rows — 取得前一次 MySQL 操作影響的資料列數
此擴充功能已在 PHP 5.5.0 中被棄用,並在 PHP 7.0.0 中移除。建議改用 MySQLi 或 PDO_MySQL 擴充功能。另請參閱 MySQL:選擇 API 指南。此函式的替代方案包括:
取得與 link_identifier
相關聯的最後一個 INSERT、UPDATE、REPLACE 或 DELETE 查詢所影響的資料列數。
link_identifier
MySQL 連線。如果未指定連線識別碼,則會假設為 mysql_connect() 所開啟的最後一個連線。如果找不到這樣的連線,它會嘗試建立一個連線,如同以無參數呼叫 mysql_connect() 一樣。如果找不到或無法建立連線,則會產生 E_WARNING
等級的錯誤。
成功時返回受影響的資料列數,如果最後一個查詢失敗則返回 -1。
如果最後一個查詢是不帶 WHERE 子句的 DELETE 查詢,則所有記錄都將從資料表中刪除,但此函式在 4.1.2 之前的 MySQL 版本中將返回零。
使用 UPDATE 時,如果新值與舊值相同,MySQL 不會更新欄位。這會導致 mysql_affected_rows() 可能不等於匹配的資料列數,而只等於實際受查詢影響的資料列數。
REPLACE 陳述式會先刪除具有相同主鍵的記錄,然後插入新的記錄。此函式返回已刪除的記錄數加上已插入的記錄數。
在 "INSERT ... ON DUPLICATE KEY UPDATE" 查詢的情況下,如果執行插入,則返回值為 1
,如果更新現有資料列,則返回值為 2
。
範例 #1 mysql_affected_rows() 範例
<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('無法連線: ' . mysql_error());
}
mysql_select_db('mydb');
/* 這應該會返回正確的已刪除記錄數 */
mysql_query('DELETE FROM mytable WHERE id < 10');
printf("已刪除的記錄數: %d\n", mysql_affected_rows());
/* 使用永遠不成立的 where 子句,它應該返回 0 */
mysql_query('DELETE FROM mytable WHERE 0');
printf("已刪除的記錄數: %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('無法連線:' . mysql_error());
}
mysql_select_db('mydb');
/* 更新紀錄 */
mysql_query("UPDATE mytable SET used=1 WHERE id < 10");
printf ("已更新的紀錄數量:%d\n", mysql_affected_rows());
mysql_query("COMMIT");
?>
上述範例將輸出類似以下的內容
Updated Records: 10
注意:交易
如果您正在使用交易,您需要在 INSERT、UPDATE 或 DELETE 查詢之後呼叫 mysql_affected_rows() 函式,而不是在 COMMIT 之後。
注意:SELECT 陳述式
要取得 SELECT 所返回的列數,可以使用 mysql_num_rows() 函式。
注意:串接外鍵
mysql_affected_rows() 函式不會計算透過外鍵約束中的 ON DELETE CASCADE 和/或 ON UPDATE CASCADE 隱含影響的列數。