1

ID に基づいて、あるテーブルから別のテーブルに複数の行を挿入しています。このプロジェクトでは、すべての DB クエリに PDO を使用しています。これは私が使用しているコード/関数です:

  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 が登録されないのはなぜですか?
を使用しているためbeginTransactioncommit1回の取引として扱われているのでしょうか?

4

1 に答える 1

4

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

于 2011-08-03T09:11:43.760 に答える