[英]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.