4

在对 MySQL 的常规单个查询语句中,我可以使用它mysql_affected_rows()==1来确定某些内容是否已更新。现在假设我正在尝试执行以下事务:

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

或者,有没有更好的方法来检查是否成功?

4

3 回答 3

1

您应该保存mysql_affected_rowsin 变量的值。总更新将是其中一些变量。

于 2012-07-25T07:07:14.210 回答
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;
于 2012-07-25T07:10:26.823 回答
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;
于 2012-07-25T07:13:15.267 回答