私はMySQLで初めてPDOを使用しています。ちょうどその時に遊んでいます。PDO lastInsertIdはトランザクションで動作しませんか?
これまでのところ、私は取引に包まれ、インサートをしようとすると...
$this->dbh->beginTransaction();
// $sql query ran
$this->dbh->commit();
echo $this->dbh->lastInsertId();
におけるlastInsertId()私はトランザクションの外で同じクエリを実行すると、私は適切に取得... 0を返しますID番号が返されました。私がここに欠けているものはありますか?
コールそれを試してみてください
lastInsertId()
をお願いしなければなりません。 –あなたはPDOの厄介な習慣に遭遇しました。はい、あなたは 'lastInsertId'_before_' commit'を呼び出さなければなりません。これは痛みですが、覚えやすいほど簡単です。 – Wrikken
@ Wrikken:トランザクションが複数の 'INSERT'文を実行するためによく使われるので、私はそれが厄介で、おそらく意図的な動作ではないと思います。したがって、3つのINSERT文のトランザクションで最初の 'INSERT'文の' lastInsertId'を取得するには、 'commit'を実行する前に' lastInsertId'を呼び出さなければなりません。なぜなら、他の2つの 'INSERT'文よりも前に呼び出さなければなりません。 –