bruce wrote:
hi..
i'm trying to understand if there's a difference/better reason for doing
transactions using either of the following psuedo approaches...
approach 1 does the commit inside the eval block, whereas approach 2 has the
commit outside the eval block... i've seen sample code with transactions
handled both ways...
approach 1:
eval
{
$dbh->do("do something");
# got this far means no errors
# commit
$dbh->commit();
};
# check errors/rollback
if ($@)
{
$dbh->rollback();
}
approach 2:
eval
{
$dbh->do("do something");
};
# check errors/rollback
if ($@)
{
$dbh->rollback();
}
else
{
# commit
$dbh->commit();
}
any comments/criticisms/thoughts/etc...
thanks...
-bruce
I think the commit needs to be inside the eval, because
thats when problems might arise. Also, I assume that you
at some point set AutoCommit = 0. I usually do transctions
like this:
sub test {
eval { $dbh->begin_work };
if ($@) {
print "begin transaction failed: $@";
return;
}
eval {
.. do some stuf ..
$dbh->commit;
};
if ($@) {
eval { $dbh->rollback };
print "transaction failed: $@";
} else {
print "data committed successfully.\n";
}
}
hope this helps,
Mayuran.
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]