如何使用MySQLi事务回滚和提交?

时间:2016-03-27 23:05:38

标签: php mysqli

我似乎遇到了PHP7中的回滚功能问题。这是我的代码,但如果我提供查询并将错误放入其中一个,它就不会回滚。它仍然会提交已经完成的所有内容。

function sql_transaction(...$queries) {
    global $db;

    $success = 1;
    $db->autocommit(FALSE);

    foreach($queries as $query) {
        $result = $db->query($query);
        echo $result;
        if(!$result) {
            $success = 0;
            break;
        }
    }

    if($success == 1) {
        $db->commit();
    }else{
        $db->rollback();
    }
    $db->autocommit(TRUE);
    return $success;
}

1 个答案:

答案 0 :(得分:2)

在执行此操作之前,您已开始执行交易。

因为您必须告诉数据库您将开始交易。

您必须在自动提交后放置<div class="img24x24 tab-achievement sprite"> <span>Hello World.</span> </div> <div class="img36x36 tab-achievement sprite"> <span>Hello World.</span> </div> <div class="tab-achievement sprite"> <span>Hello World.</span> </div> <hr> <div class="img36x36 tab-locker sprite" data-text="Hello World - pseudo only"> </div>(FALSE);

请阅读文档:mysqli::begin_transaction



附:请记住,引擎不支持事务的表无法完成。因此,如果在添加$db->begin_transaction();语句begin_transaction后无效,请检查您的表引擎是否已设置为具有事务支持的引擎。

在mysql终端中检查你的表引擎调用查询:

rollback()

您将获得定义了引擎的数据库中的表列表。

获取事务安全引擎列表您可以通过在mysql终端中调用查询来查找(查找事务:是):

SHOW TABLE STATUS FROM database_name_goes_here;