2012-07-25 60 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;