2017-06-11 12 views
0

私はトランザクションの中にまとめたPHPスクリプトの中にいくつかのmySQLクエリを持っています。同じ接続で複数のクエリで最後に挿入されたIDを取得するにはどうすればよいですか?

各クエリの最後に挿入されたIDを取得したいのですが、最後に挿入されたIDがそのまま残っているため、最初のIDのみが有効です(効果的に1つの大きなクエリとして扱われるためです接続)。

これらは私のクエリです:

$conectarDB->beginTransaction(); 

$a = $conectarDB->prepare(" INSERT INTO usuarios SET userEmail =?, userName =? WHERE userID=? "); 
$a->bindParam(1, $userEmail); 
$a->bindParam(2, $userApellido); 
$a->bindParam(3, $userID); 
$a->execute(); 

$pago1 = $conectarDB->lastInsertId(); 

$b = $conectarDB->prepare(" INSERT INTO versionesUsuarios SET userID=?, userEmail=? "); 
$b->bindParam(1, $userID); 
$b->bindParam(2, $userEmail); 
$b->execute(); 

$pago2 = $conectarDB->lastInsertId(); 

$conectarDB->commit(); 

これを解決する方法は?どのように取得する$pago1$pago2

+0

実行後に 'lastInsertId'を呼び出すので、これはうまくいくはずです。コミット後に行うと '0'を返します。 'PDO :: ATTR_EMULATE_PREPARES'の有無にかかわらず、それらは異なるテーブルと同じIDであり、偶然同じIDを持ちます。 – fyrye

+0

ただし、最初のINSERTにパラメータがありません。 'userID'が必要ですので、' $ a-> bindParam(3、$ userID); ' – fyrye

+0

ありがとう! (欠落しているパラメータを修正しました。ありがとうございます!) – Rosamunda

答えて

0

私はあなたが実行されたクエリごとにこれを試すことができると思う。私はそれが仕事だと願っています。

$keys = $conectarDB->query("SELECT LAST_INSERT_ID()"); 
$arr = $keys->fetchColumn(); 
0

コミットがすべてのクエリを一度に実行するため、このようなことがあります。それぞれの挿入クエリで開始しコミットしようとします。

$pago1 = $conectarDB->lastInsertId(); 
$conectarDB->commit(); 
$conectarDB->beginTransaction(); 
+2

は実行がデータベースへの提出であるので重要ではありません。実行後およびコミットせずにトランザクションをロールバックしても、IDは増分されます。 – fyrye

関連する問題