<?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) 为什么会这样?请帮帮我。
答案 0 :(得分:0)
检查数据库存储引擎。如果是MyISAM,请将其更改为InnoDB。
答案 1 :(得分:-1)
我不知道我是否理解得很好,但是......
如果表上有主键,则不需要在INSERT上通知ID字段。
如果您尝试第二次运行该文件,我认为发生此错误是因为该表已经是id 4而脚本再次尝试插入。