繁体   English   中英

如何在PHP ADODB中回滚事务

[英]How to Rollback transactions in PHP ADODB

我试图在php(mysql-driver)中使用ADODB进行数据库事务,但由于某些原因我无法使事务正常工作。 目前代码看起来有点像这样(为简化顺序而简化)

// Start DB-connection
$db = NEWADOConnection('mysql');
$db->debug = false;
$db->disableBlobs = false;
$db->PConnect($host, $login, $password, $database); or die ("Connection failed");

// Start DB-transaction
$db->autoCommit = false; // According to doc, this should not be needed
$db->SetTransactionMode("SERIALIZABLE");
$db->StartTrans();

// Update some value
$statement = $db->Prepare("UPDATE tableName SET column=? WHERE id=$id");
$result = $db->Execute($statement, array($newValue));

// Do a rollback
$db->FailTrans(); // According to doc, indicates that CompleteTrans will rollback
$db->CompleteTrans();

// Close connection
$db->Close();

据我所知,ADODB的文档,代码应该可以工作,但由于某种原因,表格在运行此代码后仍然会更新。

有谁知道我忘记改变哪种配置?

提前致谢

JVApen


一些背景信息:

PHP-version: PHP 5.3.10-1ubuntu3.9
ADODB-version: V5.18
Documentation I've based my code on: http://phplens.com/lens/adodb/docs-adodb.htm

在有人对代码中的一个奇怪的东西发表评论之前:是的,我正在使用预处理语句和字符串连接进行查询,尽管$ id是我可以控制的东西,而$ newValue是一些输入参数。

发现问题,这个问题似乎没有出现在ADODB中(虽然它应该已经警告过)。

将MySQL与MyISAM表而不是InnoDB表一起使用可确保不支持事务。 如果您将两者混合使用,则仅支持InnoDB表的事务。

将所有表格转换为InnoDB,现在问题似乎已得到解决。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM