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

PDO执行INSERT语句未插入数据 如何输出缺失表/列等错误信息

问题排查及解决方法

直接报错原因

你遇到的Undefined variable: e报错,是因为你把调用$e->getMessage()的调试代码写在了catch块之外,$e是catch的入参,只有触发异常进入catch块时才会被定义,try块内不存在这个变量。

无数据写入的核心原因

你的PDO连接默认是静默错误模式,SQL执行出错时不会抛出PDOException,所以不会进入catch块,你没有判断execute()方法的返回值,才会误以为执行成功。

正确输出SQL错误的方案

方案1:开启PDO异常模式(推荐)

在你的两个PDO连接实例$this->account、$this->player初始化的位置,添加配置开启异常模式:

// PDO实例化后添加以下代码,两个数据库连接都要配置
$this->account->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->player->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

之后把catch块中//echo $e->getMessage();的注释去掉,删除你写在try块里的$e相关调试代码,后续SQL执行出错(缺失表、字段、约束不满足等)都会自动进入catch块,直接用echo $e->getMessage()就能输出完整错误信息。

方案2:不修改错误模式,直接获取语句错误

如果不想调整全局错误配置,每次调用execute()之后,输出$stmt->errorInfo()即可拿到错误详情:

$stmt->execute();
// 加这行输出错误
var_dump($stmt->errorInfo());

errorInfo()返回的数组第二位是SQL错误码,第三位是具体错误描述,缺失表、字段的错误会直接展示在里面。

额外优化建议

execute()方法执行成功返回true,失败返回false,你当前没有判断执行结果,建议加上校验逻辑避免误判执行状态:

if (!$stmt->execute()) {
    var_dump($stmt->errorInfo());
    // 错误处理逻辑
    exit;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:06:03