(PHP 4, PHP 5)
mysql_affected_rows — 取得前一次 MySQL 操作所影響的記錄行數(shù)
本擴(kuò)展自 PHP 5.5.0 起已廢棄,并在自 PHP 7.0.0 開始被移除。應(yīng)使用 MySQLi 或 PDO_MySQL 擴(kuò)展來替換之。參見 MySQL:選擇 API 指南來獲取更多信息。用以替代本函數(shù)的有:
$link_identifier
= NULL): int
取得最近一次與 link_identifier
關(guān)聯(lián)的
INSERT,UPDATE 或 DELETE 查詢所影響的記錄行數(shù)。
link_identifier
MySQL
連接。如不指定連接標(biāo)識,則使用由 mysql_connect()
最近打開的連接。如果沒有找到該連接,會(huì)嘗試不帶參數(shù)調(diào)用
mysql_connect()
來創(chuàng)建。如沒有找到連接或無法建立連接,則會(huì)生成
E_WARNING
級別的錯(cuò)誤。
執(zhí)行成功則返回受影響的行的數(shù)目,如果最近一次查詢失敗的話,函數(shù)返回 -1。
如果最近一次操作是沒有任何條件(WHERE)的 DELETE 查詢,在表中所有的記錄都會(huì)被刪除,但本函數(shù)返回值在 4.1.2 版之前都為 0。
當(dāng)使用 UPDATE 查詢,MySQL 不會(huì)將原值和新值一樣的列更新。這樣使得 mysql_affected_rows() 函數(shù)返回值不一定就是查詢條件所符合的記錄數(shù),只有真正被修改的記錄數(shù)才會(huì)被返回。
REPLACE 語句首先刪除具有相同主鍵的記錄,然后插入一個(gè)新記錄。本函數(shù)返回的是被刪除的記錄數(shù)加上被插入的記錄數(shù)。
"INSERT ... ON DUPLICATE KEY UPDATE" 這種情況的查詢,當(dāng)執(zhí)行了一次 INSERT 返回的值會(huì)是 1
;如果是對已經(jīng)存在的記錄執(zhí)行一次 UPDATE 將返回 2
。
示例 #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');
/* 本例返回被刪除記錄的準(zhǔn)確數(shù)目 */
mysql_query('DELETE FROM mytable WHERE id < 10');
printf("Records deleted: %d\n", mysql_affected_rows());
/* 對于非真值的 WHERE 子句,應(yīng)返回 0 */
mysql_query('DELETE FROM mytable WHERE 0');
printf("Records deleted: %d\n", mysql_affected_rows());
?>
以上例程的輸出類似于:
Records deleted: 10 Records deleted: 0
示例 #2 使用事務(wù)處理的 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
注意: 事務(wù)處理
如果使用事務(wù)處理(transactions),需要在 INSERT,UPDATE 或 DELETE 查詢后調(diào)用 mysql_affected_rows() 函數(shù),而不是在 COMMIT 命令之后。
注意: SELECT 語句
要獲取 SELECT 所返回的行數(shù),可以用 mysql_num_rows()。
注意: Cascaded 外鍵
mysql_affected_rows() does not count rows affected implicitly through the use of ON DELETE CASCADE and/or ON UPDATE CASCADE in foreign key constraints.