如何在CodeIgniter中以JSON格式插入数据?数据库3字段需逐行添加
没问题,我来帮你搞定CodeIgniter里的这两个需求——逐行添加数据和JSON格式插入。下面分步骤给你讲清楚,代码都是可直接复用的:
一、逐行添加数据(常规方式)
如果你的数据是从表单、数组等常规来源获取的,逐行插入的思路很简单:循环遍历每条数据,调用Model的插入方法即可。
1. 编写Model(数据操作层)
先创建一个处理数据库操作的Model,比如命名为DataModel.php:
<?php class DataModel extends CI_Model { // 插入单条数据的方法 public function insert_single_row($data) { // 替换成你的实际数据库表名 return $this->db->insert('your_table_name', $data); } }
2. 在Controller中调用逐行插入
在Controller里加载Model,然后循环处理每条数据:
<?php class DataController extends CI_Controller { public function insert_rows() { // 加载Model $this->load->model('DataModel'); // 假设这是你要插入的多行数据(可来自表单提交、外部接口等) $rows_to_insert = [ ['field1' => 'value1', 'field2' => 'value2', 'field3' => 'value3'], ['field1' => 'value4', 'field2' => 'value5', 'field3' => 'value6'], // 更多行... ]; $success_count = 0; foreach ($rows_to_insert as $row) { // 调用Model的插入方法 if ($this->DataModel->insert_single_row($row)) { $success_count++; } else { // 插入失败的处理,比如记录日志 log_message('error', 'Failed to insert row: ' . print_r($row, true)); } } // 返回结果提示 echo "成功插入 $success_count 条数据"; } }
二、以JSON格式完成数据插入
如果是前端通过JSON格式传递数据(比如前后端分离场景),需要先接收并解析JSON,再进行逐行插入。
1. 前端发送JSON请求示例(可选)
前端可以用AJAX发送POST请求,Content-Type设为application/json:
// 示例:用fetch发送JSON数据 const rows = [ {"field1": "json_val1", "field2": "json_val2", "field3": "json_val3"}, {"field1": "json_val4", "field2": "json_val5", "field3": "json_val6"} ]; fetch('/index.php/DataController/insert_via_json', { method: 'POST', headers: { 'Content-Type': 'application/json', // 如果开启了CSRF保护,需要带上CSRF token,比如: // 'X-CSRF-Token': '你的CSRF token值' }, body: JSON.stringify(rows) }) .then(response => response.json()) .then(data => console.log(data));
2. 后端Controller接收并处理JSON
在Controller里编写处理JSON请求的方法:
<?php class DataController extends CI_Controller { public function insert_via_json() { // 关闭默认输出缓冲,确保返回纯JSON $this->output->set_content_type('application/json'); // 获取前端传来的JSON数据 $json_raw = file_get_contents('php://input'); $rows_data = json_decode($json_raw, true); // 验证JSON是否有效 if (json_last_error() !== JSON_ERROR_NONE) { $this->output->set_output(json_encode([ 'status' => 'error', 'message' => '无效的JSON数据' ])); return; } // 加载Model $this->load->model('DataModel'); $success_count = 0; foreach ($rows_data as $row) { // 验证必要字段是否存在(替换成你的三个字段名) if (isset($row['field1'], $row['field2'], $row['field3'])) { $insert_data = [ 'field1' => $row['field1'], 'field2' => $row['field2'], 'field3' => $row['field3'] ]; if ($this->DataModel->insert_single_row($insert_data)) { $success_count++; } } else { $this->output->set_output(json_encode([ 'status' => 'warning', 'message' => '部分数据缺少必填字段' ])); return; } } // 返回成功结果 $this->output->set_output(json_encode([ 'status' => 'success', 'message' => "成功插入 $success_count 条数据" ])); } }
一些注意事项
- CSRF保护:如果你的CodeIgniter开启了CSRF保护(默认开启),前端发送请求时需要带上CSRF token,可通过
$this->security->get_csrf_hash()获取,放在请求头或参数里。 - 数据验证:建议在插入前对数据进行验证,比如用CodeIgniter的
form_validation类,避免无效数据插入数据库。 - 批量插入替代:如果不需要严格逐行操作,可使用CI自带的
insert_batch()方法,效率更高,只需传入所有行数据:$this->db->insert_batch('your_table_name', $rows_data);
内容的提问来源于stack exchange,提问作者Robot
相关产品推荐
相关产品推荐

