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

通过表单更新登录用户信息时遇SQL未知列错误求助

问题分析与解决方案

嘿,这问题一看就明白啦!你碰到的Unknown column 'Adrian93' in 'where clause'错误,核心原因是WHERE子句里的用户名没加单引号。

MySQL会把没有引号包裹的Adrian93当成一个列名去查找,而你的users表根本不存在这个名字的列,自然就抛出错误了。

先快速修复当前报错

把WHERE子句里的用户名用单引号包裹起来就行:

$query = "UPDATE users SET firstName='$firstName', lastName='$lastName', DOB='$DOB', natInsNo='$natInsNo', address='$address', email='$email', mobile='$mobile', password='$password' WHERE username = '{$_SESSION['username']}'";

注意看'{$_SESSION['username']}'这部分,外层加了单引号后,MySQL就会把它当成字符串值去匹配用户名字段了。

更关键的:改用预处理语句杜绝SQL注入

不过上面的写法存在SQL注入风险,强烈建议用MySQLi的预处理语句来实现,这才是安全规范的做法:

if(isset($_POST['update'])) {
    // 获取表单提交的数据
    $firstName = $_POST['firstName'];
    $lastName = $_POST['lastName'];
    $DOB = $_POST['dob'];
    $natInsNo = $_POST['natInsNo'];
    $address = $_POST['address'];
    $email = $_POST['email'];
    $mobile = $_POST['mobile'];
    $password = $_POST['password'];
    $username = $_SESSION['username'];

    // 准备预处理SQL语句
    $stmt = $conn->prepare("UPDATE users SET firstName=?, lastName=?, DOB=?, natInsNo=?, address=?, email=?, mobile=?, password=? WHERE username = ?");
    // 绑定参数(s代表字符串类型,可根据你的字段实际类型调整)
    $stmt->bind_param("sssssssss", $firstName, $lastName, $DOB, $natInsNo, $address, $email, $mobile, $password, $username);
    
    // 执行更新操作
    if($stmt->execute()){
        echo "用户信息更新成功!";
    } else {
        echo "更新失败:" . $stmt->error;
    }
    // 关闭预处理语句
    $stmt->close();
}

预处理语句会自动处理字符串的引号问题,还能彻底避免SQL注入攻击,比直接拼接SQL的写法安全得多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:33:04