2011-08-03 3 views
1

ID를 기반으로 한 테이블에서 다른 테이블로 여러 행을 삽입합니다. 이 프로젝트에서는 모든 DB 쿼리에 PDO를 사용하고 있습니다. 이것은 내가 사용하고있는 코드/기능입니다 :MySQL에서 마지막으로 삽입 된 ID를 가져올 수 없습니다.

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; 
    } 

그러나 일부 resaon에서는 마지막으로 삽입 된 ID를 가져올 수 없습니다. SELECT LAST_INSERT_ID()Toad for MySQL에 입력하면 결과가 표시되지만 마지막으로 삽입 된 행의 ID가 아닙니다.

이렇게 행을 삽입 할 때 마지막으로 삽입 한 행 ID가 등록되지 않은 이유는 무엇입니까?
나는 beginTransactioncommit을 사용하고 있기 때문에 하나의 트랜잭션으로 처리됩니까?

답변

4

예, 그렇습니다. 거래를 커밋하기 전에 ID를 받아야합니다.

관련 문제