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

如何修复MySQL报错You have an error in your SQL syntax

问题排查

  • 语法错误直接原因:answer字段属于字符串类型,你直接将$_POST['answer']拼接到SQL语句中时没有加单引号包裹,一旦用户提交的内容包含非数字字符、特殊符号(比如你报错里的!)就会破坏SQL的语法结构,触发语法报错。另外你不需要给now()套SELECT子查询,直接写now()即可。
  • 严重安全风险:直接把$_SESSION['id']、$_POST['answer']这类外部可控变量拼接进SQL语句,存在高危SQL注入漏洞,攻击者可以通过构造特殊提交内容篡改数据库、窃取数据,甚至拿到服务器权限,绝对不能使用这种写法。

修复代码(使用预编译语句规避注入+解决语法问题)

$connection = mysqli_connect("XXX", "XXX", "XXX", "XXX");
if (isset($_POST['answer'])) {
    // 预编译SQL语句,用?作为参数占位符
    $stmt = mysqli_prepare($connection, "INSERT INTO `answers`(`questionId`, `dateAndTime`, `answer`) VALUES (?, NOW(), ?)");
    // 绑定参数,i对应int类型,s对应string类型,按占位符顺序对应变量
    mysqli_stmt_bind_param($stmt, "is", $_SESSION['id'], $_POST['answer']);
    // 执行语句
    if (!mysqli_stmt_execute($stmt)) {
        echo "Error description: " . mysqli_stmt_error($stmt);
    }
    // 关闭语句对象
    mysqli_stmt_close($stmt);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:24:04