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

使用PHP表单向MySQL插入数据时出现MariaDB SQL语法错误求助

问题分析与解决方案

嘿,我一眼就揪出你代码里的问题啦!

错误根源

你给SQL语句里的列名套了单引号('),这在MySQL/MariaDB里是典型的语法错误。记住:单引号只能用来包裹字符串类型的字段值,而列名(或表名)如果需要转义,必须用反引号(`)——要是列名不是MySQL的保留关键字,甚至可以直接不用转义符号。

看你抛出错误的SQL:

INSERT INTO time ('emp_name', 'clockdate', 'start_at', 'end_at') 
VALUES ('John Smith','2018-05-01','08:00:00','12:00:00')

这里的'emp_name'写法完全错误,数据库会把它当成普通字符串,而非列名,自然就触发语法报错了。另外补充一句:time是MySQL的关键字,你的表名用这个词的话,也最好用反引号包起来,避免隐性冲突。

修正后的SQL写法

两种正确姿势任你选:

  1. 用反引号转义(推荐,适配所有场景):
INSERT INTO `time` (`emp_name`, `clockdate`, `start_at`, `end_at`) 
VALUES ('John Smith','2018-05-01','08:00:00','12:00:00')
  1. 若列名/表名非关键字,可直接省略转义:
INSERT INTO time (emp_name, clockdate, start_at, end_at) 
VALUES ('John Smith','2018-05-01','08:00:00','12:00:00')

对应PHP代码修正示例

假设你的PHP连接逻辑已经正常,修正后的代码大概是这样:

// 假设$conn是已经建立好的数据库连接
$sql = "INSERT INTO `time` (`emp_name`, `clockdate`, `start_at`, `end_at`) 
        VALUES ('John Smith','2018-05-01','08:00:00','12:00:00')";

if ($conn->query($sql) === TRUE) {
    echo "新记录插入成功";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();

额外重要提醒

为了避免SQL注入风险,强烈建议你放弃直接拼接字符串的写法,改用预处理语句,示例如下:

$stmt = $conn->prepare("INSERT INTO `time` (`emp_name`, `clockdate`, `start_at`, `end_at`) VALUES (?, ?, ?, ?)");
// 绑定参数,"ssss"表示四个参数都是字符串类型
$stmt->bind_param("ssss", $emp_name, $clockdate, $start_at, $end_at);

// 给变量赋值
$emp_name = "John Smith";
$clockdate = "2018-05-01";
$start_at = "08:00:00";
$end_at = "12:00:00";

$stmt->execute();
echo "新记录插入成功";
$stmt->close();
$conn->close();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:17:52