我想知道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();
}
答案 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
完全符合你的需要......希望有所帮助