全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

CodeIgniter 3 数据库更新操作的正确实现方法

本文详解 codeigniter 3 中安全执行 update 操作的关键要点,重点解决因表名传参错误、缺少条件约束或未校验输入导致的数据全表覆盖问题,并提供可直接复用的控制器与模型代码。

在 CodeIgniter 3 中执行数据库更新(UPDATE)时,若出现“整张表数据被清空或意外覆盖”的现象,绝大多数情况源于 WHERE 条件未生效或表名传入异常。回顾你提供的代码,核心问题有两点:

  1. 表名参数传递错误:控制器中调用 $this->Modellaptop->update_client($where, $data, 'tb_invoice ') 时,表名 'tb_invoice ' 末尾含多余空格(注意引号内空格),导致 CodeIgniter 无法正确识别表名,可能触发底层异常行为或默认作用于错误对象;
  2. 模型方法设计不健壮:原模型 update_client() 强制要求传入 $table 参数,但未做非空校验;更严重的是,$this->db->update() 方法必须明确指定表名,而你却将表名作为第三个参数传入,但模型内部并未接收和使用它(原模型代码缺失 $table 形参),造成逻辑断层。

✅ 正确做法是:将表名硬编码在模型中(推荐)或作为必需参数显式接收,同时严格校验 WHERE 条件与数据完整性

以下是优化后的完整实现:

✅ 推荐写法(模型内固化表名,更安全)

Controller(控制器)

public function update_() {
    // 获取 POST 数据(建议增加 XSS 过滤)
    $id = $this->input->post('id', true);
    $nama = $this->input->post('nama', true);
    $alamat = $this->input->post('alamat', true);
    $number = $this->input->post('number', true);
    $rekening = $this->input->post('rekening', true);
    $email = $this->input->post('email', true);

    // 基础验证:确保 ID 存在且为数字
    if (empty($id) || !is_numeric($id)) {
        $this->session->set_flashdata('message', 
            'Invalid ID.'
        );
        redirect('Admin/invoice');
        return;
    }

    $data = [
        'nama'     => $nama,
        'alamat'   => $alamat,
        'number'   => $number,
        'rekening' => $rekening,
        'email'    => $email
    ];

    $where = ['id' => $id];

    // 调用模型更新方法(无需传表名)
    $result = $this->Modellaptop->update_client($where, $data);

    if ($result > 0) {
        $this->session->set_flashdata('message', 
            'Update successful!'
        );
    } else {
        $this->session->set_flashdata('message', 
            'No record was updated. Please check ID or data.'
        );
    }

    redirect('Admin/invoice');
}

Model(模型)

public function update_client($where = [], $data = []) {
    // 安全防护:拒绝空 WHERE 或空数据
    if (empty($where) || empty($data)) {
        return 0;
    }

    // 明确指定表名(无空格!区分大小写需匹配数据库实际命名)
    $this->db->where($where);
    $this->db->update('tb_invoice', $data); // ← 关键:表名在此处硬编码,无空格

    // 返回影响行数,便于控制器判断结果
    return $this->db->affected_rows();
}

⚠️ 注意事项与最佳实践

  • 表名务必精确:'tb_invoice '(带空格) ≠ 'tb_invoice',后者才是有效标识符;
  • 始终校验 WHERE 条件:避免因 $id 为空导致 WHERE id = NULL 失效,进而更新全表(CodeIgniter 在无有效 WHERE 时可能执行无条件 UPDATE);
  • 启用 Query Binding(可选增强):对敏感字段如 email、number 可结合 $this->db->escape() 或使用查询绑定防止注入;
  • 启用数据库调试:开发阶段可在 application/config/database.php 中设置 'db_debug' => TRUE,快速定位 SQL 错误;
  • 返回值检查不可省略:affected_rows() 是判断更新是否真实发生的唯一可靠依据。

通过以上修正,你的更新操作将严格限定于目标记录,彻底规避数据丢失风险,符合生产环境的安全与健壮性要求。


# php  # 编码  # app  # session  # ai  # 安全防护  # 数据丢失  # red  # sql  # NULL  # 标识符  # 形参  # number  # 对象  # this  # table  # database  # 数据库  # 的是  # 才是  # 可在  # 可选  # 第三个  # 可直接  # 而你  # 绑定  # 整张  # 清空 


相关文章: 高端建站如何打造兼具美学与转化的品牌官网?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  如何在Windows环境下新建FTP站点并设置权限?  制作门户网站的参考文献在哪,小说网站怎么建立?  建站之星后台管理系统如何操作?  怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?  ,网页ppt怎么弄成自己的ppt?  高端企业智能建站程序:SEO优化与响应式模板定制开发  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  山东网站制作公司有哪些,山东大源集团官网?  建站之星CMS建站配置指南:模板选择与SEO优化技巧  盐城做公司网站,江苏电子版退休证办理流程?  家庭服务器如何搭建个人网站?  建站之星如何开启自定义404页面避免用户流失?  如何选择美橙互联多站合一建站方案?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  如何通过多用户协作模板快速搭建高效企业网站?  家具网站制作软件,家具厂怎么跑业务?  建站主机功能解析:服务器选择与快速搭建指南  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  大型企业网站制作流程,做网站需要注册公司吗?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  如何快速搭建安全的FTP站点?  兔展官网 在线制作,怎样制作微信请帖?  网站制作说明怎么写,简述网页设计的流程并说明原因?  建站之星后台密码遗忘如何找回?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  高性能网站服务器配置指南:安全稳定与高效建站核心方案  ppt在线制作免费网站推荐,有什么下载免费的ppt模板网站?  如何通过西部建站助手安装IIS服务器?  公司门户网站制作流程,华为官网怎么做?  Dapper的Execute方法的返回值是什么意思 Dapper Execute返回值详解  早安海报制作网站推荐大全,企业早安海报怎么每天更换?  5种Android数据存储方式汇总  桂林网站制作公司有哪些,桂林马拉松怎么报名?  制作营销网站公司,淘特是干什么用的?  如何用花生壳三步快速搭建专属网站?  山东云建站价格为何差异显著?  建站之星2.7模板:企业网站建设与h5定制设计专题  子杰智能建站系统|零代码开发与AI生成SEO优化指南  定制建站流程步骤详解:一站式方案设计与开发指南  测试制作网站有哪些,测试性取向的权威测试或者网站?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  如何通过wdcp面板快速创建网站?  专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?  广州美橙建站如何快速搭建多端合一网站?  建站VPS选购需注意哪些关键参数?  海南网站制作公司有哪些,海口网是哪家的?  python的本地网站制作,如何创建本地站点? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。