簡體   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