PHP与MySQL表单提交异常:提示成功但数据库无记录求助
问题诊断与修复方案
嘿,我一眼就揪出了你代码里的核心问题——这就是为啥你明明看到“Record inserted successfully.”,但数据库里却没生成记录的关键原因!
最致命的错误:参数绑定格式符不匹配
你写的INSERT语句里有6个占位符?,对应6个字段,但在调用mysqli_stmt_bind_param的时候,你只给了3个字符串格式符"sss":
mysqli_stmt_bind_param($stmt, "sss", $usrID, $Fname, $Lname, $short_title, $email, $phone);
这个格式符的数量必须和你要绑定的参数数量完全一致啊!你有6个参数,就得写6个s(因为你的字段都是字符串类型),也就是"ssssss"。格式符不够的话,mysqli只会绑定前3个变量,剩下的3个参数根本没传进SQL语句里,数据库收到的是不完整的插入请求,自然不会创建记录,但它又没触发连接级的错误,所以你才会被那个假的成功提示忽悠了。
修复后的核心代码片段
把绑定参数的那行改成下面这样,同时我还给你加了执行结果的检查,再也不会被假提示坑了:
if($stmt = mysqli_prepare($link, $sql)){ // 修正格式符数量为6个s,匹配6个字段 mysqli_stmt_bind_param($stmt, "ssssss", $usrID, $Fname, $Lname, $short_title, $email, $phone); // 执行语句后一定要检查返回值,确认真的成功了 if(mysqli_stmt_execute($stmt)){ echo "Record inserted successfully."; // 可以加个受影响行数的输出,直观确认插入结果 echo " 受影响行数: " . mysqli_stmt_affected_rows($stmt); } else { // 用语句级的错误函数,比连接级的更精准 echo "ERROR: 执行插入失败: " . mysqli_stmt_error($stmt); } } else{ echo "ERROR: 无法准备SQL语句: $sql. " . mysqli_error($link); }
额外的排查建议
- 核对表名和字段名:确认你的
tableName和字段名(usrID,Fname这些)和数据库里的完全一致,Linux环境下的MySQL是大小写敏感的,别写错大小写。 - 检查数据库权限:虽然你说连接正常,但还是要确认你的数据库用户有没有
INSERT权限,权限不足也可能导致插入静默失败。 - 开启错误提示:开发阶段可以打开PHP的错误提示,在代码开头加
error_reporting(E_ALL); ini_set('display_errors', 1);,能帮你快速捕捉到隐藏的警告。
修复完你再试试提交表单,要是看到“受影响行数: 1”,那就是真的成功啦!
内容的提问来源于stack exchange,提问作者Mike Rosen
相关产品推荐
相关产品推荐

