Heim >Backend-Entwicklung >PHP-Tutorial >YII 事物无效问题 HELP HELP HELP HELP HELP HELP

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

WBOY
WBOYOriginal
2016-06-23 13:54:31875Durchsuche

各位大神们 入门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();    }


回复讨论(解决方案)

坐等回复

人呢,人呢。。。。。

但不明白你的代码在做什么
但需要注意的是:事务只在同一连接中有效
Yii 的数据库是基于 PDO 的,每次 new PDO 都会产生新的连接(这一点是与分立函数的数据库扩展是不同的)

但不明白你的代码在做什么
但需要注意的是:事务只在同一连接中有效
Yii 的数据库是基于 PDO 的,每次 new PDO 都会产生新的连接(这一点是与分立函数的数据库扩展是不同的)



谢谢版主,已经解决。
我这样的做法是为了在service中调用多个业务的DB来实现事物。想法应该是没错的,具体错误已经解决了。

经过排查之后找到是数据库引擎问题,我要操作那个表类型不知道怎么变成 MyISAM 了。


MyISAM 和 InnoDB 讲解 InnoDB和MyISAM是许多人在使用MySQL时最常用的两个表类型,这两个表类型各有优劣,视具体应用而定。基本的差别为:MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快。

折腾了一上午,刚开始也考虑到可能是数据库引擎问题,但是可能性比较小就忽略了,大家以后还是要细心啊!!!!
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn