2016-08-11 43 views
0

我正在經歷一個奇怪的行爲,即使數據庫中的寄存器更改,函數mysql_affected_rows返回0。mysql_affected_rows返回0,但數據庫已更改

我已經將問題簡化爲最簡單的事情,所以您可以輕鬆地重現它。

在一方面我有一個文件(page1.php中)用下面的代碼,簡單地在數據庫中的更新寄存器的值:

<?php 
mysql_connect('localhost', 'dbu', 'pass'); 
mysql_select_db('db'); 
$stmt="UPDATE aa SET a=4 WHERE id=0"; 
echo $stmt; 
mysql_query($stmt); 
$n = mysql_affected_rows(); 
echo "<br>N:".$n; 
?> 

在另一方面,我有另一頁(第2頁.PHP)與此無關的任意代碼:

<?php 
echo "HELLO"; 
?> 

如果我去的第1頁,更新數據庫,N爲1,一切正常。

如果我將UPDATE語句更改爲SET a = 5,然後重新加載頁面,數據庫更新,則N爲1,表示罰款。

但是,如果我將UPDATE更改爲SET a = 6,那麼我轉到page2,然後返回到page1,然後再次正確更新數據庫,但在這種情況下N爲0。爲什麼mysql_affected_rows返回0只有在這種情況下?

回答

2

mysql_affected_rows僅適用於剛剛在執行腳本中運行的查詢(如果我記得正確)。一旦轉到第2頁,然後重新加載第1頁,則不會進行更改,因爲它們是第一次。

+0

賓果,這是我的想法以及..除非OP更改更新查詢中的值,它會在第一次運行後顯示總是零受影響的行 –

+0

查詢在第1頁,以及mysql_affected_rows,所以進行了更改。實際上,數據庫已更新,但此功能並未反映此情況。爲什麼? – Victor

+0

@Víctor「受影響」的行是已更改的行,而不是已匹配的行;儘管通常有一個連接設置可以改變它。 – Uueerdo

相關問題