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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:08:07