【问题标题】:understanding pdo rollback() in sql errors and autoincrement values了解 sql 错误和自动增量值中的 pdo rollback()
【发布时间】:2012-09-21 10:59:23
【问题描述】:

我有一个问题...

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

我的 SQL 表有 3 列:id(autoincrement)、username(unique) 和 password

在我的代码中我有这个:

$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 个错误(例如,用户名 =“luv”,密码 =“222222”)之后插入一条新记录时,这条新记录已插入,但 ID=6 而不是 ID=2 .

这样好吗? rollback() 不应该将自动增量留在最后一个正确的值? 我错过了什么?

感谢您的帮助。

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

    当您进行回滚时,auto inc 值会“烧毁”。这是正常的,也是意料之中的。

    参考this stackoverflow entry

    【讨论】:

      猜你喜欢
      • 2015-09-16
      • 1970-01-01
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多