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

Python执行MySQL插入语句报错1054 (42S22):字段列表未知列'z'

错误原因

代码通过字符串直接拼接生成SQL语句,没有给varchar类型的插入值加单引号包裹,同时这种写法本身存在严重的SQL注入风险。
当输入用户名z、密码1时,拼接后实际执行的SQL为:

insert into signup values(z,1);

MySQL解析时会把没有单引号包裹的z判定为字段名,而非要插入的字符串内容,因此触发1054 (42S22): Unknown column 'z' in 'field list'报错。

修复方案

推荐使用参数化查询修复,这是mysql.connector官方支持的标准写法,会自动处理值的类型转义和引号包裹,同时彻底避免SQL注入问题。
将signup函数中的插入逻辑替换为以下内容即可:

def signup():
    username=input('USERNAME:')
    password=input("PASSWORD:")
    # 使用%s作为参数占位符,禁止手动拼接用户输入到SQL语句中
    insert_sql = "INSERT INTO signup (username, password) VALUES (%s, %s)"
    mycursor.execute(insert_sql, (username, password))
    mydatabase.commit()
    print("\t\t\t****SIGNUP SUCESSFUL***")
    print("Now please login to continue.")
    login()

不推荐的临时测试修复方式:手动给拼接的字符串值加单引号,即把执行语句改成mycursor.execute("insert into signup values('"+username+"','"+password+"');")。这种写法一旦用户输入的内容包含单引号就会直接触发SQL语法错误,还可能被恶意用户利用注入窃取、篡改数据库内容,仅可用于临时本地测试,绝对不能在正式环境使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:19:07