使用codeigniter在数据库中插入数据数组的有效方法

时间:2014-09-02 00:26:34

标签: php mysql arrays codeigniter

我在数据库中有以下表格字段:

id, user_id, permission_id, value, created.

我有一个数组的结果,一次可能包含20个以上的不同值。整个包含permission_id值,其余字段类似。类似于user_id的{​​{1}}只会与每个permission_id相同,而value始终为1created与包含当前日期相同和时间。

现在我可以使用以下代码插入数据库:

 $user_perms=$this->input->post('permissions'); 

        foreach($user_perms as $perms) {

        $userPerms['permission_id']=$perms;
        $userPerms['user_id']=$uid;
        $userPerms['value']=1;
        $userPerms['created']=date("Y-m-d H:i:s");
        $this->admins->insertPerms($userPerms);
    }

现在运行得非常好。但我想让它更有效率和更快。您可能已经注意到我在foreach循环中运行insert query。因此,当用户单击后端的提交时,查询可能一次运行30次以上。这不是一个好主意。

因此,如何在不使用循环的情况下插入数据?

1 个答案:

答案 0 :(得分:1)

您可以使用$this->db->insert_batch()一次插入多行:

$this->db->insert_batch(
    'table_name',
    array(
        // first row:
        array('permission_id' => 1, 'user_id' => 1, 'value' => 1, 'created' => '...'),
        // second row:
        array('permission_id' => 2, 'user_id' => 1, 'value' => 1, 'created' => '...')
    )
);

(阅读更多here

然而,你显然不会以这种方式避免foreach循环,因为你需要以某种方式创建你传递给它的数据数组......
因此,优化它的另一种方法是在事务中运行这些插入。那个(至少关注SQL)相当于在一个查询中一次性插入它们,因为它的COMMIT是最昂贵的操作,因此1次提交快于20次提交。