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

MySQL数据更新报错求助:mysqli_query触发SQL语法错误

问题排查与修复

核心错误:SQL语法缺失逗号

你的UPDATE语句中,多个字段更新时字段之间必须用逗号分隔,原代码里username和password之间没有逗号,导致数据库无法解析SQL语句,这就是报错的直接原因。

原代码拼接后的SQL示例:

UPDATE users SET username = 'xxx' password = 'yyy' WHERE id = zzz

正确的格式应该是:

UPDATE users SET username = 'xxx', password = 'yyy' WHERE id = zzz

修复后的基础代码

先修正语法错误,调整字符串拼接部分:

<?php 
if(isset($_POST['submit'])) { 
    $username = $_POST['username']; 
    $password = $_POST['password']; 
    $id = $_POST['id']; 

    // 注意在username行末尾添加逗号
    $query = "UPDATE users SET "; 
    $query .= "username = '$username', "; 
    $query .= "password = '$password' "; 
    $query .= "WHERE id = $id"; 

    $result = mysqli_query($connection, $query); 
    if(!$result) { 
        die ('QUERY FAILED' . mysqli_error($connection)); 
    } 
} 
?>

重要提醒:避免SQL注入风险

直接将用户输入的POST参数拼接到SQL语句中存在严重的SQL注入漏洞,强烈建议使用预处理语句来执行数据库操作,示例代码如下:

<?php 
if(isset($_POST['submit'])) { 
    $username = $_POST['username']; 
    $password = $_POST['password']; 
    $id = $_POST['id']; 

    // 预处理语句模板
    $query = "UPDATE users SET username = ?, password = ? WHERE id = ?";
    $stmt = mysqli_prepare($connection, $query);
    // 绑定参数(s代表字符串,i代表整数,根据id实际类型调整)
    mysqli_stmt_bind_param($stmt, "ssi", $username, $password, $id);
    // 执行语句
    mysqli_stmt_execute($stmt);

    if(mysqli_stmt_affected_rows($stmt) === 0) {
        echo "未更新任何数据,请检查ID是否存在";
    } else {
        echo "数据更新成功";
    }

    mysqli_stmt_close($stmt);
} 
?>

额外检查点

  1. 确认$_POST['id']是否正确传递,错误信息中显示WHERE id=为空,说明可能前端表单没有提交id参数,或者参数名拼写错误。
  2. 确保$connection变量已经正确初始化并连接到数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:56:06