将mysqli-> rollback(),回滚以前提交的每个查询?

时间:2012-12-21 17:58:57

标签: php transactions mysqli commit rollback

我想知道mysqli-> rollback是否会回滚在回滚之前提交的所有查询。

例如,在下面的代码中,将提交第一个查询,但第二个查询将因错误拼写“用户名”而失败。这是否意味着回滚之前的查询将会执行还是不会执行?

$mysqli->autocommit(FALSE);

$query = "INSERT INTO users (username, password) VALUES ('user123', '1apple')";
$query2 = "INSERT INTO users (**usernam**, password) VALUES ('user987', '2apple')";

if($resrouce = $mysqli->query($query)){

    $mysqli->commit();

    if($resource2 = $mysqli->query($query2)){

        $mysqli->commit();

    }else{

        $mysqli->rollback();

    }

}else{
    $mysqli->rollback();
}

3 个答案:

答案 0 :(得分:4)

提交事务后,您无法回滚它,只能回滚未被注释的语句

答案 1 :(得分:1)

修改第8行并在代码的最后添加一行:

$mysqli->autocommit(FALSE);

$query = "INSERT INTO users (username, password) VALUES ('user123', '1apple')";
$query2 = "INSERT INTO users (**usernam**, password) VALUES ('user987', '2apple')";

if($resrouce = $mysqli->query($query)){

    //$mysqli->commit(); this not necesary

    if($resource2 = $mysqli->query($query2)){

        $mysqli->commit();

    }else{

        $mysqli->rollback();

    }

}else{
    $mysqli->rollback();
}

$mysqli->close();

答案 2 :(得分:-3)

我个人认为PDO库比mysqli更适合数据库访问。你可以查看: http://php.net/manual/en/pdo.begintransaction.php

完全符合你的需要......希望有所帮助