处理事务
处理事务是许多应用程序的一个重要的特征。(对于初学者来说,处理事务是你可以提交一打查询操作的过程,而这些查询是都成功了,还是有部分失败了,都需要考虑进去。
经典范例是银行处理。钱从你的帐户转出,然后转入到其他某个人的帐户中。只要其中任意一项失败,那么,这整个过程都必须被认定为失败。不然,钱被划出,而没有进对方的帐户;或者,钱没有划出,对方帐户无端多了一笔小费。)
处理事务可以在代码级上进行机警地管理控制。 常数错误检查被用来判断是否要commit(事务的所有各项都正确,执行正确,结束事务)还是rollback(事务中有错误,所有改动需要恢复原来状况)。adodb 有一些能使处理操作正确进行的有用的函数。下例在某个职员的结余加10,并在另一个上减10,整个过程有两个查询,作为一个完整的事务。
$sql1 = update employees set balance=balance-10 where id=15;
$sql2 = update employees set balance=balance+10 where id=22;
$db->starttrans();
$db->execute($sql);
$db->execute($sql2);
$db->completetrans();
当你浏览老的代码时,可能会看到一个比较老的方法来实现这一切。使用 begintrans()、committrans()和rollbacktrans()函数时,需要你自己来处理错误。starttrans()和 completetrans()将会自动地处理错误,并适当地进行commit或rollback。当需要的时候,你可以通过failtrans()来强制执行rollback。
当然你可能需要知道处理是失败了还是成功了。adodb 提供了 hasfailedtrans() 来实现这个功能。 如果出错(或者,你可以将这种情况称作failtrans()),返回true;如果成功,返回false。
$sql1 = update employees set balance=balance-10 where id=15;
$sql2 = update employees set balance=balance+10 where id=22;
$db->starttrans();
$db->execute($sql);
$db->execute($sql2);
$db->completetrans();
if ($db->hasfailedtrans()) {
// something went wrong
}
值得注意的是,你的数据库需要支持这些事务函数。 (大多数的数据库是支持的,不过,mysql innodb表支持,可 mysql myisam 表不支持。)
我希望我所做的一切能让你对数据库库函数能有极大的兴趣。还有大量有趣的函数可以用来从数据库表中自动生成html,并且同一结果有不同的方法来实现。你可以在此找到完整的手册。
祝你好运!
