YII 事物无效问题 HELP HELP HELP HELP HELP HELP !!!!!!

我要做一个激进的男人 2014-07-04 11:17:05
各位大神们 入门PHP程序员求帮助

Yii事物

官方写法:

$transaction=$connection->beginTransaction();
try
{
$connection->createCommand($sql1)->execute();
$connection->createCommand($sql2)->execute();
//.... other SQL executions
$transaction->commit();
}
catch(Exception $e)
{
$transaction->rollBack();
}


自己封装的写法:
说明:$this->getDb()是父类通过Yii 获取到的$connection对象
我只是在实例化的时候把$connection对象传到Db层,然后Db层进行增删改查等操作
但是在DB层的时候,执行excuse()方法时候直接插入到数据库了,事物没起作用,求解!!!
service层

public function addCourseRecommend($courseRecommend,$payWayArray)
{
try{
$connection=$this->getDb();
$transaction=$connection->beginTransaction();
$this->courseRecommendDb= new CourseRecommendDb($connection);
$this->payWayDb=new PayWayDb($connection);
$this->courseRecommendDb->addCourseRecommend($courseRecommend);
foreach($payWayArray as $tempPayWay)
{
$this->payWayDb->addPayWay($tempPayWay);
$tempPayWayRecommend =new PayWayRecommend();
$this->payWayDb->addPayWayRecommend($tempPayWayRecommend);
}
$this->commit($transaction);
}catch (Exception $e){
$this->rollback($transaction);
$this->closeLink();
throw $e;
}
$this->closeLink();
}

...全文
279 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
人呢,人呢。。。。。
  • 打赏
  • 举报
回复
坐等回复
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
但不明白你的代码在做什么 但需要注意的是:事务只在同一连接中有效 Yii 的数据库是基于 PDO 的,每次 new PDO 都会产生新的连接(这一点是与分立函数的数据库扩展是不同的)
谢谢版主,已经解决。 我这样的做法是为了在service中调用多个业务的DB来实现事物。想法应该是没错的,具体错误已经解决了。 经过排查之后找到是数据库引擎问题,我要操作那个表类型不知道怎么变成 MyISAM 了。 MyISAM 和 InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快。 折腾了一上午,刚开始也考虑到可能是数据库引擎问题,但是可能性比较小就忽略了,大家以后还是要细心啊!!!!
xuzuning 2014-07-04
  • 打赏
  • 举报
回复
但不明白你的代码在做什么 但需要注意的是:事务只在同一连接中有效 Yii 的数据库是基于 PDO 的,每次 new PDO 都会产生新的连接(这一点是与分立函数的数据库扩展是不同的)

4,250

社区成员

发帖
与我相关
我的任务
社区描述
国内外优秀PHP框架讨论学习
社区管理员
  • Framework
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧