2011-08-02 10 views
14

私はMySQLで初めてPDOを使用しています。ちょうどその時に遊んでいます。PDO lastInsertIdはトランザクションで動作しませんか?

これまでのところ、私は取引に包まれ、インサートをしようとすると...

$this->dbh->beginTransaction(); 
// $sql query ran 
$this->dbh->commit(); 

echo $this->dbh->lastInsertId(); 

におけるlastInsertId()私はトランザクションの外で同じクエリを実行すると、私は適切に取得... 0を返しますID番号が返されました。私がここに欠けているものはありますか?

+4

コールそれを試してみてくださいlastInsertId()をお願いしなければなりません。 –

+3

あなたはPDOの厄介な習慣に遭遇しました。はい、あなたは 'lastInsertId'_before_' commit'を呼び出さなければなりません。これは痛みですが、覚えやすいほど簡単です。 – Wrikken

+1

@ Wrikken:トランザクションが複数の 'INSERT'文を実行するためによく使われるので、私はそれが厄介で、おそらく意図的な動作ではないと思います。したがって、3つのINSERT文のトランザクションで最初の 'INSERT'文の' lastInsertId'を取得するには、 'commit'を実行する前に' lastInsertId'を呼び出さなければなりません。なぜなら、他の2つの 'INSERT'文よりも前に呼び出さなければなりません。 –

答えて

26

あなたはtransaction

をコミットする前にトランザクションをコミットする前に

$this->dbh->beginTransaction(); 
// $sql query ran 
echo $this->dbh->lastInsertId(); 
$this->dbh->commit(); 
+0

[this](http://www.php.net/manual/en/pdo.lastinsertid.php#85129)も参照してください。 – Starx

+0

これはちょうど私が窓から飛び出すのを助けました。ありがとう! –

関連する問題