我已经围绕 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/