PHP POST传值前端正常提交 触发MySQL 1048空值错误被数据库拒绝
问题排查与修复方案
1. 语法错误直接导致逻辑判断失效
你代码中所有修改$bandera状态的语句都用了比较运算符==,而非赋值运算符=,相当于这几行代码完全没生效,就算数据库操作失败,$bandera永远保持初始值true,最后一定会返回成功,但实际数据库操作已经出错:
// 错误写法 $bandera == false; // 正确写法 $bandera = false;
2. POST参数接收失败的常见原因
你用的是CodeIgniter框架的$this->input->post()方法,该方法只能读取Content-Type: application/x-www-form-urlencoded或multipart/form-data格式的请求数据:
- 如果前端发送的是
application/json格式的请求,该方法无法读取参数,会返回null,需要手动解析输入流:$json = file_get_contents('php://input'); $postData = json_decode($json, true); - 建议先在方法最开头打印所有接收的参数校验是否拿到有效值,再往下执行:
// 调试用,打印所有POST参数和你组装的$data,确认参数是否正常 var_dump($this->input->post()); var_dump($data); exit;
3. 数据库查询逻辑错误
你插入证据记录后,用eCodReporte和dRegistro作为条件查询刚插入的记录,时间精度到秒,一旦插入和查询的执行时间跨秒,就会查询不到记录,导致后续逻辑直接走失败分支。正确做法是插入后直接获取自增主键ID:
// 插入完成后直接拿插入ID,不需要再按时间查询 $insReporteEvidencia = $this->Inserts->insReporteEvidencia($data); $insertId = $this->db->insert_id();
4. 可选优化点
- 入库前增加必填参数非空校验,避免把空值传给数据库触发报错
- 多文件上传的文件名要增加唯一标识(比如随机字符串、循环下标$i),避免同一秒上传的文件因为文件名重复被覆盖
内容的提问来源于stack exchange,提问作者JUANPABLODEJESUS FIGUEROA JARA
相关产品推荐
相关产品推荐

