Codeigniter在MySQL中将多维数组作为行插入

时间:2010-11-12 15:28:34

标签: php mysql codeigniter

请参考我问过的这个问题 Codeigniter Insert Multiple Rows in SQL

重申

<tr>
<td><input type="text" name="user[0][name]" value=""></td>
<td><input type="text" name="user[0][address]" value=""><br></td>
<td><input type="text" name="user[0][age]" value=""></td>
<td><input type="text" name="user[0][email]" value=""></td>
</tr>
<tr>
<td><input type="text" name="user[1][name]" value=""></td>
<td><input type="text" name="user[1][address]" value=""><br></td>
<td><input type="text" name="user[1][age]" value=""></td>
<td><input type="text" name="user[1][email]" value=""></td>
</tr>
..........

可以像这样插入MySQL

 foreach($_POST['user'] as $user)
{
    $this->db->insert('mytable', $user);
}

这导致多个MySQL查询。是否可以进一步优化它,以便插入发生在一个查询中

像这样的东西

insert multiple rows via a php array into mysql

但利用codeigniters更简单的语法。感谢

5 个答案:

答案 0 :(得分:4)

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

查看code igniter user guide了解详情。

答案 1 :(得分:3)

现在记录得很好,可能对某些人有用:

$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')

答案 2 :(得分:0)

CodeIgniter似乎没有mutli-insert方法。而且,即使它有,你可能会遇到类似的问题:

  • 达到最大查询长度上限
  • 必须锁定表直到插入完成
  • 处理错误可能会有点困难
  • ...

答案 3 :(得分:0)

Codeigniter 2(即将发布的版本)将采用批量插入方法。

答案 4 :(得分:0)

在CI 2中,有一个set_insert_batch()活动记录功能。