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

Mysqli INSERT语句执行失败求助:PHP表单插入数据库无响应

问题诊断与修复方案

让我帮你拆解下为什么INSERT操作始终失败——你的代码里有几个明确的SQL语法错误,再加上缺少必要的错误检测机制,导致你看不到具体问题。另外还有个严重的安全风险必须修正,具体如下:

1. 字段名的引号用错了

SQL里字段名不能用单引号(')包裹,单引号是给字符串值用的。如果你的字段名不是SQL关键字,其实可以不用引号;要是必须区分的话,得用反引号(`)。你现在的写法会让数据库把字段名当成字符串常量,自然找不到对应的字段。

错误写法:

INSERT INTO commandes ('name', 'id_sport', ...)

正确写法:

INSERT INTO commandes (`name`, `id_sport`, ...)

2. 时间拼接的语法错误

你写的'$firsthour':00完全不符合SQL语法,数据库会把它拆成两个独立的部分,直接报错。应该把小时和分钟拼成一个完整的字符串,比如'$firsthour:00'。

3. 没做错误检测,等于闭着眼调试

你既没检查数据库连接是否成功,也没管mysqli_query的执行结果,就算报错了你也看不到。一定要加上错误判断,不然出问题根本找不到方向。

4. 直接拼POST参数=送人头式SQL注入

把用户输入的内容直接拼进SQL语句里,是非常危险的操作,随便就能被黑客攻破数据库。必须用预处理语句来处理参数,这是行业标准做法。


修正后的完整代码

<?php
// 获取POST参数
$sport = $_POST['sport']; 
$level = $_POST['level']; 
$date = $_POST['date']; 
$firsthour = $_POST['first']; 
$lasthour = $_POST['last']; 

// 先做个简单的非空校验(可选但推荐)
if(empty($sport) || empty($level) || empty($date) || empty($firsthour) || empty($lasthour)){
    die("所有必填字段都不能为空哦");
}

echo "sport: " . $sport . " Level " . $level . " Date ". $date . " first hour " . $firsthour. " last hour " . $lasthour . "<br>";

// 连接数据库并检查是否成功
$connexion = mysqli_connect("localhost", "root", "", "database");
if (!$connexion) {
    die("数据库连接炸了: " . mysqli_connect_error());
}

// 用预处理语句写SQL,参数用?占位
$reqadd = "INSERT INTO commandes (`name`, `id_sport`, `id_niveau`, `date`, `heure_début`, `heure_fin`) 
           VALUES (?, ?, ?, ?, ?, ?)";

// 初始化预处理语句
$stmt = mysqli_prepare($connexion, $reqadd);
if(!$stmt){
    die("预处理语句创建失败: " . mysqli_error($connexion));
}

// 绑定参数:第一个参数是类型标识,s=字符串,i=整数,根据你表的字段类型调整
// 假设id_sport和id_niveau是整数,就把对应的s改成i
$name = 'Amendera Lochan';
$firsthour_time = $firsthour . ':00';
$lasthour_time = $lasthour . ':00';
mysqli_stmt_bind_param($stmt, "sssiss", $name, $sport, $level, $date, $firsthour_time, $lasthour_time);

// 执行并判断结果
if(mysqli_stmt_execute($stmt)){
    echo "数据插入成功啦!";
} else {
    echo "插入失败,错误信息: " . mysqli_stmt_error($stmt);
}

// 收尾:关闭语句和连接
mysqli_stmt_close($stmt);
mysqli_close($connexion);
?>

额外提醒

  • 开发阶段可以开启PHP错误提示,方便调试:error_reporting(E_ALL); ini_set('display_errors', 1);
  • 确认下你数据库表的字段类型和插入值是否匹配,比如id_sport如果是整数类型,那$sport得是整数,不能传字符串。
  • 永远不要直接把用户输入拼进SQL里,预处理语句是必须的!

内容的提问来源于stack exchange,提问作者Aliënor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:07:40