2

我想知道 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();
}
4

3 回答 3

4

事务一旦提交,就不能回滚,只能回滚尚未提交的语句。

于 2012-12-21T18:03:08.807 回答
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();
于 2013-01-03T19:38:21.733 回答
-3

就我个人而言,我发现 PDO 库比 mysqli 更适合数据库访问。您可以查看: http: //php.net/manual/en/pdo.begintransaction.php

这正是你所需要的......希望有帮助

于 2012-12-21T18:13:56.970 回答