我尝试使用 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/