2012-03-15 20 views
0

Codeigniterでは、複数の挿入を行うSQL文字列を作成すると、それぞれの挿入されたIDを取得するにはどうすればよいですか?codeigniterに一括挿入のIDを取得する方法は?

// Prepare the SQL 
$sql = ''; 
$chunk = array(array(), array(), array()); // The elements are arrays 
foreach($chunk as $arr){ 
    // The first field is the primary key (INT NOT NULL auto_increment) 
    $sql .= "(NULL, {$arr[0]}, {$arr[1]}, {$arr[2]}, {$arr[3]}, {$arr[4]})"; 
    if($arr!= $last) $sql .= ', '; 
} 

// Start inserting into the db 
$this->db->trans_start(); 
$this->db->query('INSERT INTO my_table VALUES '.$sql); 
// A few other queries go here which need the IDs of the previous insert 
$this->db->trans_complete(); 

これは私のトランザクションを初めて使用したときです。

答えて

0

代わりにトランザクションを使用することにしました。

+0

あなたは管理された方法を共有して、挿入された値のIDを取得できますか? – Searock

0

おそらく、挿入前にMAX idを記録し、一括挿入後にそれより大きいIDをすべて選択する必要があります。

EDIT:

私はMySQL manualでこれを見つけた:

LOCK TABLESを使用して、このようなInnoDBテーブルなどのトランザクションテーブル、持つテーブルのロックを解除する正しい方法は、との取引を開始しますSET autocommit = 0(START TRANSACTIONではない)の後にLOCK TABLESを指定し、明示的にトランザクションをコミットするまでUNLOCK TABLESを呼び出さないようにします。

+0

一度私がMAX idを取得すると、他の何人かのユーザーが突然同じような挿入をしてから、私が自分で行うことができるのでMAX IDを増やすことはできますか?これが起こる可能性はありますか? – enchance

+0

これはテーブルロックの意味です – landons

+0

申し訳ありませんが、私はmysqlを初めて使い慣れましたが、トランザクションを利用すると自動的に行われますか? – enchance

関連する問題