事务操作,怎么都是There is no active transaction,官方文档试过了,到底怎么用?

rt


另外对不同数据表的操作,都是可以回滚的么


1、
    public function test($data){
$user = DI()->notorm->user;
//Step 1: 开启事务
DI()->notorm->beginTransaction('db_demo');
//Step 2: 数据库操作
$user->insert(array('phone' => 'test7'));
$user->insert(array('phone' => 'test6'));

$this->getORM()->insert(array('phone' => 'test8',));
DI()->notorm->rollback('db_demo');
//Step 3: 提交事务
// DI()->notorm->commit('db_demo');
}
2、
public function test($data){
// 第一步:先指定待进行事务的数据库(通过获取一个notorm表实例来指定;否则会提示:PDO There is no active transaction)
$user = DI()->notorm->user;
$verification = DI()->notorm->verification;
//第二步:开启事务开关(此开关会将当前全部打开的数据库都进行此设置)
DI()->notorm->test = 'BEGIN';

//第三步:进行数据库操作
$verification->insert(array('phone' => 'test4',));
$user->insert(array('phone' => 'test5',));
$user->insert(array('phone' => 'test7',));
$this->getORM()->insert(array('phone' => 'test8',));
DI()->notorm->test = 'ROLLBACK';
//第四:提交/回滚
// DI()->notorm->test = 'COMMIT';
//
}


不报错了,但是不回滚啊


-------------------------------------

看过  http://qa.phalapi.net/?/article/20   了,版本1.3.4
public function test($data){

//第一步:先指定待进行事务的数据库(通过获取一个notorm表实例来指定;否则会提示:PDO There is no active transaction)
$user = DI()->notorm->user;

//第二步:开启事务开关(此开关会将当前全部打开的数据库都进行此设置)
DI()->notorm->transaction = 'BEGIN';

//第三步:进行数据库操作
$user->insert(array('phone' => 'test1',));
$user->insert(array('phone' => 'test2',));
//DI()->notorm->transaction = 'ROLLBACK';
//第四:提交/回滚
DI()->notorm->transaction = 'COMMIT';

}

commit 没问题,但是一回滚就报错

怎么做呢

-------------------------------------------------------------

用的是mysql

报错:
<br />
<b>Fatal error</b>: Uncaught exception 'PDOException' with message 'There is no active transaction' in E:\www\PhalApi\PhalApi\NotORM\NotORM.php:87
Stack trace:
#0 E:\www\PhalApi\PhalApi\NotORM\NotORM.php(87): PDO->rollBack()
#1 E:\www\PhalApi\PhalApi\PhalApi\DB\NotORM.php(127): NotORM->__set('transaction', 'ROLLBACK')
#2 E:\www\PhalApi\Demo\Model\User.php(22): PhalApi_DB_NotORM->__set('transaction', 'ROLLBACK')
#3 E:\www\PhalApi\Demo\Domain\User.php(7): Model_User->test('name')
#4 E:\www\PhalApi\Demo\Api\Default.php(46): Domain_User->test('name')
#5 [internal function]: Api_Default->test()
#6 E:\www\PhalApi\PhalApi\PhalApi.php(58): call_user_func(Array)
#7 E:\www\PhalApi\Public\demo\index.php(14): PhalApi->response()
#8 {main}
thrown in <b>E:\www\PhalApi\PhalApi\NotORM\NotORM.php</b> on line <b>87</b><br />
已邀请:

dogstar - PhalApi创始人

赞同来自:

感谢这么详细的纪录,请问是什么数据库?具体的报错信息是什么?可否贴一下?

1中的代码,是否应该开启了事务再获取表实例?事务操作是基于数据库的,所以应该可以操作多个表。

xubing6243

赞同来自:

/**
* 开启事务
*/
public function Begin(){
return $this->getORM()->queryAll('START TRANSACTION', array());
}

/**
* 提交事务
*/
public function Commit(){
return $this->getORM()->queryAll('COMMIT', array());
}

/**
* 回滚事务
*/
public function Rollback(){
return $this->getORM()->queryAll('ROLLBACK', array());
}

要回复问题请先登录注册