3

質問があります...

私は pdo と beginTransaction() を使用していますが、いくつかのことを理解していません。

私のSQLテーブルには、id(autoincrement)、username(unique)、およびpasswordの3つの列があります

そして、私のコードにはこれがあります:

$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=2 ではなく ID=6 であるということです。

それは大丈夫です?rollback() は、正しい最後の値で自動インクリメントを残すべきではありませんか? 私は何かが恋しいですか?

手伝ってくれてありがとう。

4

1 に答える 1

2

ロールバックを行うと、auto inc 値が「焼き付け」られます。これは正常であり、予期されたものです。

このstackoverflowエントリを参照してください

于 2012-09-21T02:13:05.463 に答える