如何在同一PHP文件中使用UPDATE和INSERT语句,INSERT执行失效如何解决
排查步骤
- 第一步开启PDO错误提示
在你的connect.php中数据库连接初始化完成后,添加以下代码开启异常报错,就能直接拿到INSERT失败的具体原因:
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
也可以在INSERT执行语句前临时打印错误信息:
// 先打印所有POST参数,确认隐藏字段有没有正确传值 var_dump($_POST); // 执行后打印SQL错误 if(!$inst->execute(['uid' => $uid, 'username' => $username, 'name' => $name, 'notif' => $notif, 'details' => $details, 'date' => $date, 'status' => $status])){ print_r($inst->errorInfo()); exit; }
- 第二步检查表单隐藏字段的传值有效性
你表单中的username隐藏字段取值是<?php echo $fetch['username']?>,如果渲染表单的页面中$fetch变量没有正确赋值,会导致username字段为空,如果notifications表的username字段设置了非空约束,就会直接插入失败。 - 第三步检查
notifications表结构
- 确认表中除了你插入的7个字段外,没有其他未设置默认值的必填字段
- 确认
date字段的类型,如果你传的是Y/m/d H:i:s格式,而表中date字段是datetime/date类型,部分数据库对日期分隔符有要求,需要改为Y-m-d H:i:s格式才能正常写入 - 确认没有字段设置了唯一约束,出现重复值导致插入被拒绝
- 第四步检查数据库权限
确认你的数据库连接账号对notifications表有INSERT权限,UPDATE执行成功不代表拥有INSERT权限,可能是权限配置被修改导致。 - 第五步确认事务配置
如果你的数据库连接开启了事务但没有提交操作,INSERT语句会被自动回滚,检查connect.php中是否有自动开启事务的配置,若是需要在INSERT执行后添加$dbh->commit();
内容的提问来源于stack exchange,提问作者Bboi1999
相关产品推荐
相关产品推荐

