2011-08-03 19 views
1

IDに基づいて、あるテーブルから別のテーブルに複数の行を挿入しています。 このプロジェクトでは、すべてのDBクエリにPDOを使用しています。これは私が使用しているコード/機能です:最後に挿入されたIDをMySQLから取得できません

protected function importData($data) { 
    $i = 0; 

    $this->db->beginTransaction(); 

    foreach($data as $item) { 
     $id = $item['id']; 

     $sql .= "INSERT INTO table1 (name,age) 
       SELECT name, age 
       FROM table12 
       WHERE id = $id; "; 

     $this->db->exec($sql); 
     $i++; 
    } 
    $this->db->commit(); 

    // None of these are working 
    $last_id1 = $this->db->exec('SELECT LAST_INSERT_ID()'); 
    $last_id2 = $this->db->lastInsertId(); 

    echo 'id1: '.$last_id1.', id2:'.$last_id2; 
    } 

しかし、私は最後に挿入されたIDを取得できません。 SELECT LAST_INSERT_ID()Toad for MySQLに入れてみると結果は得られますが、最後に挿入された行のIDではありません。

このように行を挿入すると、最後に挿入された行IDが登録されないのはなぜですか?
beginTransactioncommitを使用しているため、1つのトランザクションとして扱われていますか?

答えて

4

はい、そうです。トランザクションをコミットする前にIDを取得する必要があります。