发新话题
打印

php adodb事务处理汇总

php adodb事务处理汇总

处理事务是许多应用程序的一个重要的特征(比如,钱从你的账户转出,然后转入到某个人的账户中。只要其中任意一步操作失败,这整个过程都必须被认定为失败。不然,钱被划出,而没有进对方的账户;或者,钱没有划出,但对方账户无端多了一笔钱)。
处理事务可以在代码级上进行机警地管理控制。常数错误检查被用来判断执行COMMIT(事务的所有各项都正确,执行正确,结束事务)还是执行ROLLBACK(事务中有错误,所有改动需要恢复原来状况)。
现在的数据库系统绝大多数都支持事务,如MySQL、Oracle、MS SQL Server等,ADODB提供一个非常好的功能,能够让你更透明地使用这一特性。请看下面的例子:
<?php
include(“libs/adodb/adodb.inc.php”);
// 创建一个mysql连接实例对
$db = NewADOConnection("mysql");
// 打开一个数据库连接
$db->Connect("localhost", “root”, “root”, “adodb”) or die("Unable to connect!");
//关闭auto-commit自动提交事务
// 开始事务处理语句块
$db->BeginTrans();
// 第一次查询
$query = "INSERT INTO library (title, author) VALUES ('测试用书', '佚名')";
$result = $db->Execute($query) or die("Error in query: $query. " . $db->ErrorMsg());
//使用第一次查询返回的ID号
if ($result){
   $id = $db->Insert_ID();
   $query = "INSERT INTO purchase_info (id, price) VALUES ($id, 'RMB 31.9')";
   $result = $db->Execute($query)

or die("Error in query: $query. " . $db->ErrorMsg());
}
// 如果操作成功
if ($result){
   // 事务提交
   $db->CommitTrans();
}// 否则回滚
else{
   $db->RollbackTrans();
}
// 清理无用的对象
$db->Close;
?>

该脚本首先 需要关掉数据库的auto commit功能,通过begintrans()方法来处理,这种方法也标志着一个事务的开始。可以使用CommitTrans()或 RollbackTrans()函数来处理操作,一旦auto commit已经关掉,你就可以任意执行所需要的查询,确认事务的查询执行无误并完毕后,由我们自己决定何时执行commit操作。
每一 次执行Execute()事务块后,它会返回一个布尔值,告诉我们是否成功地执行了查询。可以跟踪到这个值,以及使用的时间,以决定是否要进行整个交易行 为。一旦你相信一切都没问题,则告诉数据库committrans()方法;如果发现有错误发生,则可以进行回滚操作??执行 rollbacktrans()方法。
值得注意的是,注意您的数据库类型是否支持这些事务函数,前面已经说过,MySQL的InnoDB类型表支持事务,但是MyISAM类型并不支持。

TOP

发新话题