在codeigniter中,是否可以从bach插入中获取最后插入的ID?

时间:2014-04-10 14:50:18

标签: php codeigniter

有没有办法从codeigniter中的批量插入中获取最后插入的ID?

这可能看起来很傻但我不知道是否有任何帮助。

2 个答案:

答案 0 :(得分:1)

您需要在循环中运行插入,这是获取每个ID的唯一方法。为了减轻服务器上的压力,您可以在事务中执行此操作。

$ids = array();

$this->db->trans_start();

foreach($data as $val){
    $this->db->insert('yourTable', array(
        'field1' => $val['foo'],
        'field2' => $val['bar']
    ));

    $ids[] = $this->db->insert_id();
}

$this->db->trans_complete();

答案 1 :(得分:1)

由于$this->db->insert_id();应返回批处理中第一行的ID,因此您只需向其中添加受影响的行数即可。但当然,假设这是可能的,因为你正在使用自动增量。

正如Rocket Hazmat指出的那样,自动增量值可能会有变化。但是,如果我们知道增量值,这不是问题。所以,这样的事情应该有效:

$increment = 2;                        // auto-increment value (probably 1 though)
$id = $this->db->insert_id();          // id of the first inserted row from the batch 
$total = $this->db->affected_rows();   // number of inserted rows
$ids = array($id);                     // add the first on to our output array of ids
for ($i = 1; $i < $total; $i += $increment) {
    $ids[] = $id + $i;                 // add each of them
}