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

PDO无法插入记录排查:incidents表数据无法写入数据库

排查数据无法写入数据库的问题

先揪出最显眼的字段名不匹配问题:
你的表单里,事件描述的输入框name是descInput,但PHP代码里却用$_POST['incDesc']来接收——这俩名字完全对不上!PDO绑定的:incDesc对应这个不存在的$_POST['incDesc'],要么导致description字段插入空值(如果字段允许为空),要么直接触发插入失败。你需要把PHP里的$incDesc = $_POST['incDesc'];改成$incDesc = $_POST['descInput'];,或者把表单里textarea的name改成incDesc,两边保持一致。

接下来,你说没收到PDO错误提示,这大概率是因为PDO没开启错误异常模式。默认情况下PDO只会返回错误码但不抛出异常,所以哪怕插入失败你也看不到具体原因。建议在数据库连接完成后加上这段代码:

$dbconn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

开启后一旦执行出错就会抛出异常,你就能立刻看到问题所在——比如日期格式不对、字段为空违反约束等等。

然后检查日期格式兼容性:数据库里的date字段是date类型,要求格式为YYYY-MM-DD,但你的表单用的是普通text输入框,用户输入的格式(比如DD/MM/YYYY)很可能不符合MySQL的要求,导致日期解析失败插入出错。你可以要么在前端验证日期格式,要么在PHP里转换格式:

// 假设用户输入是DD/MM/YYYY格式,转成MySQL支持的格式
$incDate = DateTime::createFromFormat('d/m/Y', $_POST['incDate'])->format('Y-m-d');

更简单的办法是把表单的input类型改成date,浏览器会自动生成符合格式的日期输入控件:

<input type="date" id="incDate" name="incDate">

另外,确认会话变量是否正常生效:虽然你说var_dump参数正常,但还是要检查$_SESSION['loggedStudent']['studentID']、$_SESSION['loggedStudent']['schoolID']、$_SESSION['loggedIn']['userID']这些变量是否真的存在且有有效值——比如PHP开头有没有加session_start();?如果会话没启动,这些变量会是空值,可能因字段非空约束导致插入失败。

最后提一句,你代码里有段完全多余且逻辑错误的代码:

$sqlfetch = 'SELECT * FROM students WHERE studentID = (SELECT MAX(studentID) from students)';
$sqlfetchexec = $dbconn -> prepare($sqlfetch);
$sqlfetchexec -> execute();
$row = $sqlfetchexec->fetch();
$_SESSION['loggedStudent'] = $row;

你插入的是incidents表,这段代码却去查students表的最大studentID,和当前事件提交完全无关,还会覆盖原来的loggedStudent会话变量,建议直接删掉。

总结一下:先修复字段名不匹配的问题,再开启PDO异常模式,这样就能看到具体错误信息,剩下的问题就能快速解决了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 11:27:52