PHP PDO 没有活跃的事务

标签 php mysql sql pdo sqltransaction

我尝试使用 PDO 类运行查询并收到此错误消息:"There is no active transaction" 在尝试提交时。

这是我的代码:

  public function runExQuery($sql) {
        $preparedQuery = $this->connect()->prepare($sql);
        $this->connect()->beginTransaction();
        $preparedQuery->execute();
        $this->connect()->commit();
}



private function connect() {
        return new PDO('mysql:host=' . $this->host . ';dbname=' . $this->database . '', $this->username, $this->password);
    }

这个错误的原因是什么?我探索了此类问题的先前帖子,但没有找到任何解决方案。

最佳答案

您的 ::connect() 方法在您每次调用它时都会创建一个新的 PDO。

由于事务在连接之外无法存活,因此重新连接会将其清除。

要更正此问题,请将 PDO 对象存储为类属性:

class MyPdoClass
{
    private $pdo;
    // ... 

    public function connect()
    {
        if ($this->pdo instanceof PDO) {
            return;
        }
        $this->pdo = new PDO(// .... 
    }

然后在调用connect后引用它:

//...
    public function runExQuery($query)
    {
        $this->connect();
        $this->pdo->prepare($query);
        // ... 
    }

关于PHP PDO 没有活跃的事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30583516/

相关文章:

php - ZF2中获取mysql表字段名

php - 如何使用 checkout.js 在 paypal 快速结帐中成功全额付款后获取 IPN 状态

MySQL 函数和 CodeIgniter Active Record

mysql - 单表和多表语法的区别?

mysql - SQL查询(SELECT)找到值时是否继续或停止从表中读取数据

sql - 在线 SQL 查询语法检查器

PHP 将新属性附加到对象时出现问题?

php - 如何将php购物车数据插入mysql数据库

php - 使用 jquery、ajax 和 php ajax() 检查本地服务器上的用户名未连接

php - 查询具有 md5 版本 id 的字段