理解sql错误和自动增量值中的pdo rollback()

时间:2012-09-21 00:43:07

标签: php mysql pdo

我有一个问题......

我使用pdo和beginTransaction(),但我不明白一些事情。

我的SQL表有3列:id(自动增量),用户名(唯一)和密码

在我的代码中我有这个:

$pdo->beginTransaction();
$prepared = $pdo->prepare("INSERT INTO (username,password) VALUES(?,?)");
$prepared->$pdo->bindParam(1,"stefan");
$prepared->bindParam(2,"111111");
$prepared->execute();
$count= $prepared->rowCount();

if($count === FALSE):
    $pdo->rollback();
    var_dump($prepared->errorInfo());
else:
    $pdo->commit();
    echo "row count: {$count}";
endif;

当我执行此代码时,一切正常,生成id = 1,username =“stefan”和password =“111111”。

现在,我正在生成一个错误,目的是测试rollback()函数。我尝试连续4次插入相同的数据,我在$ prepared-> errorInfo()中得到了唯一的错误。也可以正常工作。

问题是,当我在这4个错误之后插入一个新记录(例如,username =“luv”,password =“222222”)时,这个新记录已被插入,但是ID = 6而不是ID = 2

没关系? rollback()不应该将自动增量保留在最后一个正确的值上吗? 我错过了什么?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

执行回滚时,

auto inc值会“烧毁”。这是正常的和预期的。

参考this stackoverflow entry