mysqli_rollback($ con)无效

时间:2017-06-21 15:21:28

标签: php mysqli

<?php

$serverName = "localhost";
$username = "root";
$password = "";
$Database = "database";
$con = mysqli_connect($serverName, $username, $password, $Database);
if (mysqli_connect_errno()) {
    echo "PLEASE IMPORT THE DATABASE";
}

try {
    mysqli_autocommit($con,FALSE);
    for ($i=1; $i < 100; $i++) { 
        $Query = "INSERT INTO `test`(`id`, `name`, `version`) VALUES ('".$i."','name".$i."','version".$i."')";
        $Result = mysqli_query($con,$Query);
        if($Result==false){
            throw new Exception(" Error Found at index " . $i);
        }
    }
    echo "calling commit";
    mysqli_commit($con);
}
catch(Exception $e) {
    echo "calling rollback";
    mysqli_rollback($con);
    echo 'Message: ' .$e->getMessage();
}

我已经创建了一个用于测试rollback()的测试文件。在测试表id中作为主键。

我第一次执行此文件时,会插入99条记录(id为1到99)。

result : 
calling commit

现在我从测试表中删除了pk值1,2,3。现在该表有96条记录(id从4到99) 如果我运行文件老化

result : 
calling rollbackMessage: Error Found at index 4

但即使我调用rollback(),pk值1,2,3也存储在表中。 现在该表有99条记录(id从1到99) 为什么会这样?请帮帮我。

2 个答案:

答案 0 :(得分:0)

检查数据库存储引擎。如果是MyISAM,请将其更改为InnoDB。

答案 1 :(得分:-1)

我不知道我是否理解得很好,但是......

  1. 如果表上有主键,则不需要在INSERT上通知ID字段。

  2. 如果您尝试第二次运行该文件,我认为发生此错误是因为该表已经是id 4而脚本再次尝试插入。