CodeIgniter中如何处理数组输入生成多维数组并批量插入MySQL?
解决CodeIgniter中数组字段批量插入数据库的问题
你说得没错,循环就是解决这个问题的核心!咱们一步步来实现你想要的效果:
第一步:生成需要的多维数组
先把表单里的固定字段值提取出来,然后遍历room数组,把每个房间号和固定字段组合成子数组,最后拼成目标多维数组。修改你控制器里的代码:
else { // 先获取固定字段的值 $guest_id = $this->input->post('guest_id'); $date_in = $this->input->post('date_in'); $date_out = $this->input->post('date_out'); // 获取room数组,CodeIgniter中直接写'room'即可,不用加[] $rooms = $this->input->post('room'); // 初始化空的$data数组 $data = array(); // 遍历每个房间号,生成对应子数组 foreach ($rooms as $room_no) { $data[] = array( 'room_no' => $room_no, 'guest_id' => $guest_id, 'date_in' => $date_in, 'date_out' => $date_out ); } // 调用模型的插入方法 $this->reservation_model->insert_reservation($data); }
第二步:模型中实现批量插入
你之前只用过插入一维数组的insert()方法,CodeIgniter的Active Record专门提供了insert_batch()方法来处理多维数组的批量插入。修改你的模型代码:
class Reservation_model extends CI_Model { public function insert_reservation($data) { // 替换成你实际的预订表名称 return $this->db->insert_batch('reservations', $data); } }
insert_batch()会自动生成高效的批量插入SQL语句,比循环执行单条插入的性能要好很多。
额外小提示
- 虽然你已经在表单验证里加了
room[]的必填规则,还是可以在代码里额外判断$rooms是否为非空数组,做一层冗余校验 insert_batch()的返回值是成功插入的行数,如果返回FALSE则说明插入失败,可以根据这个做后续的错误处理
内容的提问来源于stack exchange,提问作者Bululu
相关产品推荐
相关产品推荐

