2012-07-25 20 views
2

在對MySQL的常規單一查詢語句中,我可以使用mysql_affected_rows()==1來確定是否更新了某些內容。現在假設我試圖執行以下的交易:因爲我有這兩個更新語句如何確定MySQL事務的成功

USE myDB; 
START TRANSACTION; 
UPDATE members SET member_active=0 WHERE member_id = 53; 
UPDATE member_subscriptions SET subscription_active=0 WHERE member_id = 53; 
COMMIT; 
ROLLBACK; 

,我應該可以在交易成功等同於mysql_affected_rows()==2

或者,有沒有更好的方法,我應該檢查成功?

+1

我很困惑。你擔心有多少行受到影響,或者交易是否成功?他們是兩個不同的東西...... – 2012-07-25 07:09:32

+0

「有沒有更好的方法,我應該檢查成功」?既然你說他們不同,你會如何推薦我檢查交易成功? – Kristian 2012-07-25 13:29:23

+0

再一次,每一行更改的重要部分,還是'COMMIT'執行正確? – 2012-07-25 15:02:28

回答

1

您應該在變量中保存mysql_affected_rows的值。總的更新將是其中的一些變量。

1

如果您有兩項交易的跟蹤,並且可以更好地判斷哪些交易未執行以及將會發生什麼反應。

USE myDB; 
START TRANSACTION; 
UPDATE members SET member_active=0 WHERE member_id = 53; 
$count1= mysql_affected_rows(); 
UPDATE member_subscriptions SET subscription_active=0 WHERE member_id = 53; 
$count2= mysql_affected_rows(); 
COMMIT; 
ROLLBACK; 

$total_affected_rows = $count1 + $count2; 
1

是檢查mysql_affected_rows()== 2是從應用程序級別的替代方法。

當您使用正確的交易時,它將100%成功(commit)或沒有任何結果(rolled back)。

編輯:您可以使用ROW_COUNT()功能在MySQL從上次查詢獲得受影響的行爲:

USE myDB; 
START TRANSACTION; 
UPDATE members SET member_active=0 WHERE member_id = 53; 
SELECT ROW_COUNT() INTO @count1; 
UPDATE member_subscriptions SET subscription_active=0 WHERE member_id = 53; 
SELECT ROW_COUNT() INTO @count2; 
COMMIT; 
ROLLBACK; 

那麼這些總和應等於2

SELECT ((@count1 + @count2) = 2) AS status;