使用PDO向MySQL插入解析表失败,数据表为空求排查
排查PDO插入MySQL无数据的常见问题
嘿,我来帮你捋捋这个PDO插入后数据库为空的问题——这种情况我碰到过好多次,大概率是几个容易忽略的小细节在搞鬼,一个个排查下:
开启PDO错误模式,抓出隐藏的报错
默认情况下PDO是静默失败的,就算SQL写错了、字段不匹配,它也不会主动告诉你。赶紧在数据库连接成功后加上这段代码,开启异常错误模式:$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);这样一旦有问题,PHP会直接抛出异常,把错误原因明明白白告诉你,比瞎猜管用多了。
检查预处理语句的绑定与执行步骤
这是最容易踩的坑:- 有没有漏写
execute()?很多人写完prepare()和bindParam()就完事了,但没调用$stmt->execute()的话,语句根本不会发送到数据库执行,自然没数据。 - 占位符和绑定的参数是不是对应?用命名占位符(
:username)的话,绑定的参数名要完全一致;用问号占位符的话,要按SQL里的顺序绑定,别搞混了。 - 参数类型是否匹配?比如数据库字段是INT类型,最好在绑定时明确指定类型,避免隐式转换出问题:
$stmt->bindParam(':age', $userAge, PDO::PARAM_INT);
- 有没有漏写
事务未提交(如果用到了事务)
如果你代码里开启了事务($pdo->beginTransaction()),但最后忘了执行$pdo->commit(),那所有插入操作都会被回滚,数据库里自然看不到数据。检查下事务相关的代码,记得提交。确认解析到的数据不是空的
先别着急怪数据库,用var_dump()把Simple HTML Dom解析出来的变量打印看看——说不定你解析的内容本身就是空的,比如DOM选择器写错了,没抓到想要的内容,那插入当然没数据。检查数据库用户权限
能连接数据库不代表有插入权限!登录MySQL控制台,执行下面的命令看看你的用户有没有INSERT权限:SHOW GRANTS FOR '你的用户名'@'你的主机地址';如果看不到
INSERT ON 你的数据库.你的表的权限,赶紧给用户加上。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

