如何在codeigniter中获取批量插入的ID?

时间:2012-03-15 20:17:19

标签: sql codeigniter

在Codeigniter中,如果我创建一个执行多个插入的SQL字符串,如何获取每个插入的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();

这也是我第一次使用交易。

2 个答案:

答案 0 :(得分:0)

您可能需要在插入之前记录MAX id,然后在批量插入之后选择大于该ID的所有ID。

修改

我在MySQL manual

中找到了这个
  

使用LOCK TABLES和UNLOCK TABLES与事务表(如InnoDB表)的正确方法是使用SET autocommit = 0(不是START TRANSACTION)开始一个事务,然后是LOCK TABLES,并且不要调用UNLOCK TABLES直到你明确提交事务。

答案 1 :(得分:0)

我决定改用事务。