PHP Conference Japan 2024

mysql_affected_rows

(PHP 4, PHP 5)

mysql_affected_rows取得前一次 MySQL 操作影響的資料列數

警告

此擴充功能已在 PHP 5.5.0 中被棄用,並在 PHP 7.0.0 中移除。建議改用 MySQLiPDO_MySQL 擴充功能。另請參閱 MySQL:選擇 API 指南。此函式的替代方案包括:

說明

mysql_affected_rows(資源 $link_identifier = NULL): 整數

取得與 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 隱含影響的列數。

另請參閱

新增註解

使用者貢獻的註解

此頁面沒有使用者貢獻的註解。
To Top