php - 事务回滚不起作用

标签 php mysql pdo transactions

我已经围绕 PDO 系统制作了一个具有额外功能的数据库包装器(是的,我知道一个包装器周围的包装器,但它只是具有一些额外功能的 PDO)。但是我注意到一个问题。

下面的内容并没有像它应该的那样工作:

<?php
var_dump($db->beginTransaction());

$db->query('
 INSERT INTO test
 (data) VALUES (?)
 ;',
 array(
  'Foo'
 )
);
print_r($db->query('
 SELECT *
 FROM test
 ;'
)->fetchAll());

var_dump($db->rollBack());

print_r($db->query('
 SELECT *
 FROM test
 ;'
)->fetchAll());
?>

var_dump 显示 beginTransaction 和 rollBack 函数返回 true,因此没有错误。

我预计第一个 print_r 调用会显示 N 个项目的数组,而第二个调用会显示 N-1 个项目。但事实并非如此,它们都显示相同数量的项目。

我的 $db->query(< sql >, < values >) 在 $pdo->prepare(< sql >)->execute(< values >) 之后什么都不调用(当然还有额外的错误处理)。

所以我认为或者 MySQL 的事务系统不工作,或者 PDO 的实现不工作或者我看到了一些错误。

有人知道问题出在哪里吗?

最佳答案

检查您的数据库类型是否等于 innoDB。总之,您必须检查您的数据库是否支持事务。

关于php - 事务回滚不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2281754/

相关文章:

php - mysql函数问题

php - mysqli 上的错误::connect_errno

mysql - (或where查询)的错误结果

php - SQL : Select all Posts from Followers

php - PDO 从选择查询中获取一列

php - 我可以在 Google Cloud Storage 中同时为多个对象创建签名网址吗?

javascript - PHP 脚本写入本地主机上的文件,但不写入 IIS 服务器上的文件

Python SQLAlchemy after_insert MapperEvent

php - mysql按升序获取最新日期记录

PHP 有效地重复 SQL 查询每个数组的项目