You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CodeIgniter批量插入功能异常,请求代码正确性排查

排查CodeIgniter批量插入失效问题

嘿,作为CodeIgniter老玩家,我帮你梳理下这段代码里的几个关键问题,这应该就是批量插入没生效的核心原因:

1. 控制器里的致命错误:未定义的$sql变量

你在执行$cmd3 = $this->Software_model->add_type($data);之后,直接用了foreach($sql->result_array() as $row),但**$sql变量根本没定义**!insert_batch()的返回值是布尔值(成功/失败)或者插入的行数,不是查询结果对象,这里会直接抛出错误,导致后续的add_equip()代码完全不会执行。

如果你想获取刚插入的jobtype表的ID,应该用CodeIgniter的$this->db->insert_id()方法(注意:insert_batch()是批量插入,insert_id()只能返回最后一条插入记录的ID)。修正后的控制器这部分应该是:

$cmd3 = $this->Software_model->add_type($data);
if($cmd3){
    // 获取最后插入的jobtype的ID
    $id2 = $this->db->insert_id();
    $data2s = array();
    foreach($dat as $key => $val){
        $data2s[] = array(
            'EquipmentName' => $_POST['txt_equipb'][$key], 
            'EquipmentType' => $_POST['txt_equiptype'][$key], 
            'RequirementID' => $id2
        );
    }
    $cmd2 = $this->Software_model->add_equip($data2s);
}

2. JS函数语法错误

你的JS函数定义写错了:function second function(){ 是非法语法,应该改成合法的函数名(比如function addEquipmentType(){),不然这段JS根本执行不了,动态添加的文本框不会被创建,导致txt_equiptype[]数组数据缺失,进而影响后面的批量插入。

修正后的JS代码:

function addEquipmentType(){
    var etype = document.createElement('input');
    etype.type = 'text';
    etype.setAttribute("name", "txt_equiptype[]");
    etype.setAttribute("class", "form-control");
    // 给动态元素设置唯一ID,避免重复
    etype.setAttribute("id", "etype_" + Date.now());
    etype.setAttribute("placeholder", "Enter Equipment Type");
    document.getElementById('third').appendChild(etype);
}

3. 潜在的数据源问题:$dat变量的合法性

你在控制器里用了foreach($dat as $key => $val),但没说明$dat是怎么来的。要确保$dat的长度和所有POST数组(比如$_POST['txt_model_num']、$_POST['txt_accessories']等)的长度一致,否则会出现数组索引越界,导致部分数据缺失。

建议在循环前先打印调试数据,确认所有POST数组的完整性:

// 调试:打印所有POST数据,确认数组结构
var_dump($_POST);
// 确认$dat的长度和POST数组长度匹配
echo "dat length: " . count($dat) . "<br>";
echo "model num length: " . count($_POST['txt_model_num']) . "<br>";
die();

4. 数据库字段匹配问题

要确保模型中insert_batch()的数组键名和数据库表的字段名完全一致(包括大小写)。比如jobtype表的字段是不是ModelNumber、Access、SerialNumber这些?如果数据库字段是小写的(比如modelnumber),那批量插入会因为字段不匹配而失败。

可以开启CodeIgniter的数据库调试,查看生成的SQL语句:
在模型的add_type方法里添加:

public function add_type($data) {
    $this->db->insert_batch('jobtype', $data);
    // 打印生成的SQL语句,排查字段是否匹配
    echo $this->db->last_query();
    return $this->db->affected_rows() > 0;
}

最后一步:开启错误提示

在CodeIgniter的config.php里开启错误提示,方便快速排查问题:

$config['log_threshold'] = 1;
$config['display_errors'] = TRUE;

按照上面的步骤修正后,你的批量插入应该就能正常工作了!

内容的提问来源于stack exchange,提问作者Cedrix Cedrix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:49:48