CodeIgniter:无循环地插入多条记录

Posted

技术标签:

【中文标题】CodeIgniter:无循环地插入多条记录【英文标题】:CodeIgniter: INSERT multiple records without cycle 【发布时间】:2013-02-03 12:01:54 【问题描述】:

可以在 CodeIgniter Active Record 中使用多个 INSERT 记录而不需要 for、foreach 等?

我当前的代码:

foreach($tags as $tag) 
    $tag = trim($tag);
    $data = array(
        'topic_id'  =>  $topic_id,
        'user_id'   =>  $user_id,
        'text'      =>  $tag
    );
    $this->db->insert('topic_tags', $data);

【问题讨论】:

【参考方案1】:

Codeigniter 活动记录有一个函数insert_batch 我认为这就是你所需要的

$data = array(
   array(
      'title' => 'My title' ,
      'name' => 'My Name' ,
      'date' => 'My date'
   ),
   array(
      'title' => 'Another title' ,
      'name' => 'Another Name' ,
      'date' => 'Another date'
   )
);

$this->db->insert_batch('mytable', $data); 

// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'), ('Another title', 'Another name', 'Another date')

适用于 Codeigniter 3.x 和 Codeigniter 2.2.6

更新的链接

insert_batch() for Codeigniter 3.x

insert_batch() for Codeigniter 2.x

【讨论】:

这也适用于版本吗?如果记录存在 -> 更新它。如果它不存在-> 插入它。当然,我会将 id 添加到内部数组中。【参考方案2】:

对于 CodeIgniter 4x 使用 $builder->insertBatch()

$data = [
    [
            'title' => 'My title',
            'name'  => 'My Name',
            'date'  => 'My date'
    ],
    [
            'title' => 'Another title',
            'name'  => 'Another Name',
            'date'  => 'Another date'
    ]
];

$builder->insertBatch($data);
// Produces: INSERT INTO mytable (title, name, date) VALUES ('My title', 'My name', 'My date'),  ('Another title', 'Another name', 'Another date')

Source

【讨论】:

以上是关于CodeIgniter:无循环地插入多条记录的主要内容,如果未能解决你的问题,请参考以下文章

使用while循环在表中插入多条记录[关闭]

使用 for 循环将多条记录插入 SQL Server 数据库

使用 CodeIgniter 查询从同一列中选择多条记录

在 codeigniter 中显示具有相同组名的多条记录

如何在 CodeIgniter 中获取活动记录插入的结果

CodeIgniter Active Record 一次删除多条记录