Mysql Codeigniter在SQL中插入多行

Mysql Codeigniter在SQL中插入多行,mysql,sql,codeigniter,optimization,batch-insert,Mysql,Sql,Codeigniter,Optimization,Batch Insert,我对Codeigniter很新鲜。我有一张类似这样的表格 <tr> <td><input type="text" name="Name[0]" value=""></td> <td><input type="text" name="Address[0]" value=""><br></td> <td><input type="text" name="Age[0]" value=""

我对Codeigniter很新鲜。我有一张类似这样的表格

<tr>
<td><input type="text" name="Name[0]" value=""></td>
<td><input type="text" name="Address[0]"  value=""><br></td>
<td><input type="text" name="Age[0]" value=""></td>
<td><input type="text" name="Email[0]" value=""></td>
</tr>



<tr>
<td><input type="text" name="Name[1]" value=""></td>
<td><input type="text" name="Address[1]"  value=""><br></td>
<td><input type="text" name="Age[1]" value=""></td>
<td><input type="text" name="Email[1]" value=""></td>
</tr>



可能有0到n行,通常为5到10行。如何在SQL中插入它们?这是否可以通过Codeigniter实现,还是应该使用本机PHP脚本


$name=$\u POST['name'];
$address=$_POST['address'];
$age=$_POST['age'];
$email=$_POST['email'];
$count=count($_POST['Name']);
对于($i=0;$i$name[$i],
“地址”=>$address[$i],
“年龄”=>$age[$i],
'email'=>$email[$i],
);
$this->db->insert('mytable',$data);
}
是我干的。它起作用了。但解决方案似乎并不雅观

kevtrout的答案看起来更好,但目前有很多错误


有没有办法一次插入所有数据?

您显示的表单将创建一个带有姓名、地址、年龄和电子邮件索引的$\u POST数组。每一行都包含表单提供的n个“行”。例如:

array(
    'name' => array('First Name','Second Name'),
    'address' => array ('First Address','Second Address'),
    'age' => array('First Age','Second Age'),
    'email' => array('First Email', 'Second Email')
    );
您可能希望将该数组重新排列为一个数组,其中数组的每个索引都是“person”。这将使将信息插入数据库变得更简单

//subtract 1 from below to account for the assumed submit button
$number_of_rows = count($_POST)-1;

for($i=0;$i<$number_of_rows;$i++){
    $person[]['name'] = $this->input->post('Name')[$i];
    $person[]['address'] = $this->input->post('Address')[$i];
    $person[]['age'] = $this->input->post('Age')[$i];
    $person[]['email'] = $this->input->post('Email')[$i];
    }
现在可以使用循环将每个人插入数据库

for($y=0;$y<count($person);$y++){
    $this->db->insert('mytable',$person[$y];
}
for($y=0;$ydb->insert('mytable',$person[$y];
}

将您的表单如下所示:

array(
    0=>array('First Name','First Address','First Age','First Email'),
    1=>array ('Second Name','Second Address','Second Age','Second Email') 
    );
<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>

codeigniter现在支持多插入/批插入。它将触发一个查询,而不是触发太多查询

$data =array();
for($i=0; $i<$count; $i++) {
$data[$i] = array(
           'name' => $name[$i], 
           'address' => $address[$i],
           'age' => $age[$i],
           'email' => $email[$i],

           );
}

$this->db->insert_batch('mytable', $data);
$data=array();
对于($i=0;$i$name[$i],
“地址”=>$address[$i],
“年龄”=>$age[$i],
'email'=>$email[$i],
);
}
$this->db->insert_batch('mytable',$data);

抛出了什么错误?我修复了上面的
$this->input->post{'Name');
的语法错误。是这样做的!是带有复杂返回函数的Ajax调用的一部分,这就是为什么必须替换上面一个更简单的示例的原因。请参阅下面的答案。这似乎不是Codeigniter方法。似乎
$this->input->post()
不像数组那样工作,所以用索引调用它是行不通的。你发布的答案没有问题。CodeIgniter的一个好处是它的灵活性。你可以在内置函数的旁边运行普通php。仔细分析,它与kevtrout的解决方案非常相似,$this->maybe->more->优雅();必须了解有关数组的更多信息。请查看
insert\u batch()
method[请参阅我的解决方案…您接受了不是最有效的解决方案…我们应该使用insert\u batch());@SomnathMuluk您是对的。请查看我稍后提出的链接问题。这假设驱动程序支持它。它不适用于CodeIgniter 2.1.4和sqlsrv驱动程序。
foreach($_POST['user'] as $user)
{
    $this->db->insert('mytable', $user);
}
$data =array();
for($i=0; $i<$count; $i++) {
$data[$i] = array(
           'name' => $name[$i], 
           'address' => $address[$i],
           'age' => $age[$i],
           'email' => $email[$i],

           );
}

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