PDO:There is no active transaction

发布于 2022-09-11 15:57:09 字数 1242 浏览 17 评论 0

报错

sentry后台看到这个错误There is no active transaction,这个问题出现在一个update方法里,大致是

function update() {
    $this->db->beginTrans();
    try {
        dosomething();
        $this->db->commitTrans();
    } catch (\Exception $ex) {
        this->db->rollBackTrans();
        throw $ex;
    }
}

dosomething()方法我也仔细检查过来,没有开启事务,结束事务的地方,报错位置就在$this->db->commitTrans();这一行,有点奇怪为什么没有事务?

db类

我猜测是db类的问题(没开启事务),这个类是我拿workman mysql helper改的(加了一个主从读取而已),源码在这里,我开启事务部分是

public function beginTrans()
{
    $this->Trans = true;
    try {
        return $this->pdo->beginTransaction();
    } catch (PDOException $e) {
        // 服务端断开时重连一次
        if ($e->errorInfo[1] == 2006 || $e->errorInfo[1] == 2013) {
            $this->closeConnection();
            $this->pdoRW = $this->getConnectionInstance($this->configs['rw']);
            $this->pdo = $this->pdoRW;
            return $this->pdo->beginTransaction();
        } else {
            throw $e;
        }
    }
}

不过,也是会开启事务,很奇怪问题发生原因(这个问题有时候会发生)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一指流沙 2022-09-18 15:57:09

有可能不是一个session.. 其实没必要重连一次.. 要找连接失败的原因. 而不是重试连接..

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文