Codeigniter 2.1 - 插入批次后返回ID

时间:2013-03-28 14:56:11

标签: php codeigniter

如何在insert_bunch之后返回所有ID?功能:

public function insert_slike($id, $slike, $folder, $polje, $tabela)
{
        $slike = explode(',', $slike);
        $i = 1;
        $data = array();
        foreach ($slike as $slk) {
            $this->img_upload_resize($slk, $folder);
            $data[] = array(
                $polje => $id,
                'path' => $slk
                );
            $i++;
        }

        $this->db->insert_batch($tabela, $data);
}

5 个答案:

答案 0 :(得分:13)

这是一种有效的方法:

由于您的记录包含结果ID,我将假设它们也会自动增加。

如果是这种情况,则执行此操作并仍使用insert_batch。

以下是您的工作:

1。您需要计算要插入的项目:

CustomTextField.swift

2. :运行批量插入:

<div style="border: 1px solid black; 
    width: 10px; 
    height: 10px; 
    display: inline-block;
    margin-right: 4px;">
</div>

第3 即可。获取批次的第一个插入ID:

$count = count($data);

4. 将计数(减1)添加到您的插入ID以获取最后的记录ID。

$this->db->insert_batch($table, $data);
你去吧!您现在拥有插入记录的第一个和最后一个ID,以及其他所有内容。

注意:

有些人问过如果两个批次插入同时发生会发生什么; InnoDB将智能地管理新行的ID以防止数据相交,从而保持此方法有效。

答案 1 :(得分:3)

之前已经讨论过关于MySQL的这个主题:

How can I Insert many rows into a MySQL table and return the new IDs?

在CodeIgniter中,使用$this->db->insert_id()将仅返回第一个插入的id。

如果我这样做,我会打开一个事务,并在每次插入时插入一个,在每次插入后存储id。

答案 2 :(得分:0)

1.创建自己的ID而不是自动生成的ID。

2.插入您已经处理过的身份

3.有一个插入ID的数组

4.返回插入ID的数组

答案 3 :(得分:0)

insert_batch()函数仅返回批处理的第一个id。 在for循环中使用insert()函数来获取所有id。

public function insert_slike($id, $slike, $folder, $polje, $tabela)
{
    $slike = explode(',', $slike);
    $data = array();
    $ids = array();
    foreach ($slike as $slk) {
        $this->img_upload_resize($slk, $folder);
        $data = array(
             $polje => $id,
             'path' => $slk
             );
        $this->db->insert($tabela, $data);
        $ids[]=$this->db->insert_id();
    }
}

答案 4 :(得分:-2)

我同意马克。 CI insert_batch只是使用foreach来完成每个插入,所以如果你使用事务来做这些事情。您将获得相同的效果或更好的效果,并且您也可以在插入后获得所有insert_id。