mysql事务处理http://dev.mysql.com/doc/refman/5.0/en/commit.html
begin end 方法说明http://ecos.phpwindow.com/advance/base/mvc/c/base_controller.html#id18
例: Ecstore的后台添加新会员,在Ecstore的中添加新会员需要先插入pam_account表中,在插入到b2c_members表中 为保证一致性,两个表都插入成功,那么则需要用到事务,这就用begin end来实现
<?php
function add(){
...
$this->begin();
$mem_model = &$this->app->model("members");
if($mem_model->validate($_POST,$message)){
$id = $mem_model->create($_POST);//在pam表中添加新增会员信息
if($id!=''&&$id){
...
$data = ...;//会员信息数据
...
$obj_account->fireEvent('register',$data,$id);//在members表中添加新增会员信息
$this->end(true, app::get('b2c')->_('添加成功!'));
}else{
$this->end(false, app::get('b2c')->_('添加失败'));
}
}else{
$this->end(false, $message);
}
}
自定义实现事务说不使用begin end而是使用Ecstore中的base_db_connections类中定义的事务方法来实现事务事务处理方法说明 http://ecos.phpwindow.com/advance/base/mvc/m/base_db_connections.html#id24
beginTransaction 开始事务 commit 事务提交 rollBack 事务回滚
还是上面那个问题,使用base_db_connections中的事务处理方法来实现
<?php
function add(){
...
$db = kernel :: database();
$db->beginTransaction();//事务开始
$mem_model = &$this->app->model("members");
if($mem_model->validate($_POST,$message)){
$id = $mem_model->create($_POST);//在pam表中添加新增会员信息
if($id!=''&&$id){
...
$data = ...;//会员信息数据
...
$obj_account->fireEvent('register',$data,$id);//在members表中添加新增会员信息
$db->commit();//提交
$message = '添加成功';
}else{
$db->rollback();
$message = '添加失败';
}
}else{
$db->rollback();
$message = '添加失败';
}
...
}
注:后台推荐使用begin end 方法来处理事务
前台,api都没有内置的方法来实现事务处理,如果需要用事务处理则需要使用base_db_connections中的事务处理方法来实现,参照后台自定义实现事务
beginTransaction 开始事务 commit 事务提交 rollBack 事务回滚