fleaphp中处理事务首先你需要对事务的处理有一定的了解。对于不用fleaphp执行事务,就是在php中直接处理事务,可以先看下:
http://hi.baidu.com/48238398/blo ... 4a47f13a87ce9c.html
下边的是关于在fleaphp中处理事务的,具体这样子做对否,请老大确认下。
总结:在fleaphp中要支持事务。
1,改'driver'=>'mysqlt' 当然,数据表要为innodb类型的ENGINE=InnoDB
2.$dbo=FLEA::getDBO();
$dbo->startTrans();
中间写操作数据库的语句,判断是否执行成功
如果都成功
$dbo->completeTrans()
如果有一条不成功
$dbo->completeTrans(flase)
3.测试中故意
$rowb=array('bd_id'=>'1','money'=>100000); //将primarykey的b_id写错,执行不成功,会出现错误提示,发现a中并没有插入数据,虽然
$rowa=array('a_id'=>'1','money'=>1000000); $a->update($rowa);这些语句已经执行,但最终没要运行到提交,所以数据库中的数据并没有变
5.数据库结构
CREATE TABLE `a` (
`a_id` int(11) NOT NULL auto_increment,
`money` int(11) NOT NULL,
PRIMARY KEY (`a_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk AUTO_INCREMENT=2 ;
INSERT INTO `a` (`a_id`, `money`) VALUES
(1, 100);
CREATE TABLE `b` (
`b_id` int(11) NOT NULL auto_increment,
`money` int(11) NOT NULL,
PRIMARY KEY (`b_id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk AUTO_INCREMENT=2 ;
INSERT INTO `b` (`b_id`, `money`) VALUES
(1, 100);
4。测试代码
<?php
error_reporting(E_ALL);
//引入fleaphp类
require_once('FLEA/FLEA.php');
//定义cache
FLEA::setAppinf('internalCacheDir',dirname(__FILE__).'/Cache');
//定义数据库连接参数
$dbDSN=array(
'driver'=>'mysqlt', //为了启用事务,这里的driver要为mysqlt
'host'=>'127.0.0.1',
'login'=>'root',
'password'=>'123456',
'database'=>'test'
);
FLEA::setAppinf('dbDSN',$dbDSN);
FLEA::init();
FLEA::loadClass('FLEA_Db_TableDataGateway');
class Table_a extends FLEA_Db_TableDataGateway
{
var $tableName='a';
var $primaryKey='a_id';
}
class Table_b extends FLEA_Db_TableDataGateway
{
var $tableName='b';
var $primaryKey='b_id';
}
$a=FLEA::getSingleton('Table_a');
$b=FLEA::getSingleton('Table_b');
//得到数据库访问对象
$dbo=FLEA::getDBO();
//开始事务
$dbo->startTrans();
//修改表,让a表中的money-30,b表中的money+30,两者同时发生或不发生
$rowa=array(
'a_id'=>'1',
'money'=>70);
$a->update($rowa);
$rowb=array(
'b_id'=>'1',
'money'=>130);
$b->update($rowb);
//如果提交了,这里出现的结果与下边的一致,如果回滚两者会不一致,这里的结果与最后的结果是否一样,取决于事物是否提交
//具体应用时,应该判断是否都成功执行。
$rowa=$a->findAll();
dump($rowa);
$rowb=$b->findAll();
dump($rowb);
//$dbo->completeTrans();//如果两个操作都成功,提交
$dbo->completeTrans(false); //否则滚回,具体提交还是滚回,需要你加判断
//用于查看事务最终有没有提交.如果提交了会和上边的输出一样
$rowa=$a->findAll();
dump($rowa);
$rowb=$b->findAll();
dump($rowb);
?>