Mysql事务回滚失败

时间:2012-10-05 14:08:55

标签: php mysql transactions

我正在使用hikashop(eshop组件)组件创建joomla(2.5)以自动导入客户。问题是我使用的JDatabase事务没有按预期工作(回滚不起作用)。方法流程单个处理每个客户并返回它所取得的天气。另外,对于调试,还有一个参数可以知道哪个方法(步骤)失败。我写了另一个使用相同回滚结构的脚本,它似乎有效,但是这个没有。我试图捕获DatabaseException,但没有例外。有部分代码无法回滚事务。

foreach ($this->customerList as $customer) {
        // start tracking database entries
        $this->db->transactionStart();

        $oCustomer = new stdClass();
        $oCustomer->raw_data = $customer;
        // escaping from sql injection
        $oCustomer = $this->escapeObj($oCustomer);
        // here we process all items taking one and going through all steps
        $methodfailed = "";
        $success = $this->processSingle($oCustomer, $methodfailed);
        $processed++;
        if ($success) {
            $succeeded++;
            // if succeded save changes
            $this->db->transactionCommit();
        } else {
            $failed++;
            echo $this->error . "<br/>";
            echo "failed method:" . $methodfailed . "<br/>";
            // if failed rollback database entries
            $this->db->transactionRollback();
        }
    }

有人有过类似的问题吗?顺便说一下,我使用的是PHP / 5.3.3-7。

2 个答案:

答案 0 :(得分:0)

我不知道transactionStart做了什么,但只有InnoDB表支持交易。我愿意打赌你的数据库表是MyISAM。

答案 1 :(得分:0)

检查您的mysql配置是否启用了 autocommit 模式。关闭它可以提供帮助。点击此处了解更多信息http://dev.mysql.com/doc/refman/5.0/en/commit.html

另外,您应该检查您的表是否是InnoDB。 MyISAM不支持交易。