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

PHP MySQL插入无报错但未写入数据库问题排查求助

排查PHP数据插入无报错但无数据写入的问题

咱们先从代码里揪出最直接的问题,再一步步验证修复:

1. 最致命的SQL语法错误

你写的INSERT语句里,$des变量没有用单引号包裹:

$query = "INSERT INTO products(name, price, type, des, img) VALUES('$name', '$price', '$type', $des, '$img')";

因为des字段大概率是字符串类型(比如TEXT/VARCHAR),直接写$des会让MySQL把它当成字段名或者无效语法,导致SQL执行失败。但你没看到报错,是因为你没开启MySQL的错误检测。

修复方法:

给$des加上单引号,修正后的SQL语句:

$query = "INSERT INTO products(name, price, type, des, img) VALUES('$name', '$price', '$type', '$des', '$img')";

2. 必须添加错误检测(关键!)

你现在的代码完全没检查SQL执行是否成功,就算失败也会跳转到success.php,自然不知道问题在哪。在mysqli_query后面加上错误判断:

$result = mysqli_query($dbc, $query);
if (!$result) {
    // 直接输出错误信息,方便调试
    die("SQL执行失败: " . mysqli_error($dbc));
}

这样一旦SQL有问题,页面会直接显示错误原因,不用瞎猜。

3. 确认表单提交按钮的name属性

你的代码开头判断的是isset($_POST['submit']),所以HTML里的提交按钮必须有name="submit",比如:

<input type="submit" name="submit" value="提交商品">

如果按钮name不对,整个插入逻辑根本不会触发,自然没有数据写入。

4. 额外的安全建议(避免后续踩坑)

你现在的写法存在严重的SQL注入风险,建议改用MySQLi预处理语句,既安全又能避免这类引号问题:

// 预处理语句模板
$query = "INSERT INTO products(name, price, type, des, img) VALUES(?, ?, ?, ?, ?)";
// 初始化预处理语句
$stmt = mysqli_prepare($dbc, $query);
// 绑定参数:"sdsss"对应参数类型,s=字符串,d=数字(price如果是数值类型用d)
mysqli_stmt_bind_param($stmt, "sdsss", $name, $price, $type, $des, $img);
// 执行语句
mysqli_stmt_execute($stmt);
// 关闭语句
mysqli_stmt_close($stmt);

最后调试小技巧

在代码开头开启PHP错误报告,能帮你快速发现变量未定义等问题:

error_reporting(E_ALL);
ini_set('display_errors', 1);

按照上面的步骤来,先修复引号问题,加上错误检测,基本就能解决数据不写入的问题了。

内容的提问来源于stack exchange,提问作者Saeed Sheikh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:58:52