9

如何在 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);
}
4

4 回答 4

17

这是一个有效的方法:

由于您的记录具有结果 ID,因此我假设它们也会自动递增。

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

这是你要做的:

1.您计算您要插入的项目:

$count = count($data);

2.运行批量插入:

$this->db->insert_batch($table, $data);

3 . 获取批次的第一个插入 ID:

$first_id = $this->db->insert_id();

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

$last_id = $first_id + ($count-1);

给你!现在,您有了插入记录的第一个和最后一个 ID,以及介于两者之间的所有其他内容。

笔记:

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

于 2016-05-06T14:35:37.737 回答
3

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

如何在 MySQL 表中插入多行并返回新的 ID?

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

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

于 2013-03-28T15:46:26.113 回答
0

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

2.插入你生成的id

3.有一个插入ID的数组

4.返回插入ID的数组

于 2013-03-30T09:12:48.900 回答
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();
    }
}
于 2017-09-15T11:43:15.323 回答