PHP表单提交数据正常但无法执行INSERT插入MySQL数据库问题求助
故障排查点整理
你代码中存在多个明显逻辑错误,按优先级排序如下:
- 变量覆盖+未定义变量问题
处理收货地址信息时直接复用了账单地址的变量名,导致账单数据被覆盖,同时INSERT需要的收货相关变量完全未定义:
原错误代码段:
需修改为:$bEmail = filter_var($_POST['_email'], FILTER_SANITIZE_STRING); // ...中间代码... $bEmail = filter_var($_POST['_dEmail'], FILTER_SANITIZE_STRING); // 覆盖了之前的账单邮箱$bEmail $bMobile = filter_var($_POST['_dMobile'], FILTER_SANITIZE_STRING); // 覆盖了之前的账单手机号$bMobile $bPhone = filter_var($_POST['_dPhone'], FILTER_SANITIZE_STRING); // 覆盖了之前的账单电话$bPhone$dEmail = filter_var($_POST['_dEmail'], FILTER_SANITIZE_STRING); $dMobile = filter_var($_POST['_dMobile'], FILTER_SANITIZE_STRING); $dPhone = filter_var($_POST['_dPhone'], FILTER_SANITIZE_STRING); - 占位符与绑定参数不匹配
INSERT语句最后定义的占位符是:id,但实际绑定的是不存在的:create占位符,且$id变量未正确赋值:- 开头SESSION赋值逻辑写反,你需要从SESSION读取用户ID,而非给SESSION赋值空的$id:
原代码$_SESSION['id'] = $id;修改为$id = $_SESSION['id']; - 最后一行绑定参数错误,原代码
$stmt->bindParam(':create', $create, PDO::PARAM_INT);修改为$stmt->bindParam(':id', $id, PDO::PARAM_INT);
- 开头SESSION赋值逻辑写反,你需要从SESSION读取用户ID,而非给SESSION赋值空的$id:
- 异常捕获范围错误
你开启了PDO::ERRMODE_EXCEPTION异常模式,但仅把数据库连接逻辑放进了try块,后续的预处理、参数绑定、执行逻辑都在try块外,一旦SQL执行出错会直接抛出异常终止脚本,不会走到你后续的错误判断分支,自然看不到任何执行提示。需要把所有数据库操作逻辑都放入try块内,或者在execute执行前新增try catch捕获错误。 - 类型匹配问题
$custId用FILTER_SANITIZE_STRING做字符串过滤,但绑定时指定了PDO::PARAM_INT整数类型,如果提交的cust_id非数字会导致绑定失败,建议改为FILTER_SANITIZE_NUMBER_INT过滤。
修复以上问题后如果仍存在异常,可以在execute前打印$stmt->errorInfo()查看具体的SQL错误信息。
内容的提问来源于stack exchange,提问作者emart53
相关产品推荐
相关产品推荐

