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
相关产品推荐
相关产品推荐

