MySQL插入报错1054(42S22):字段列表存在未知列'dawdw',求排查方案
错误原因及解决办法
错误原因
你的INSERT SQL语句里,VALUES后的字符串值(比如dawdw、awdawd)没有用单引号包裹,MySQL会把这些无引号的内容识别为列名,但你的ord表中不存在名为dawdw的列,所以触发1054 (42S22)错误。
解决办法
方式1:给字符串值加单引号(不推荐,存在SQL注入风险)
修改execute里的SQL语句,把每个值用单引号括起来:
crsr.execute(f"INSERT INTO ord (type, link, sitename, telgramname) VALUES ('dawdw', 'awdawd', 'awdwada', 'adwwa')")
方式2:使用参数化查询(推荐,安全且规范)
用占位符%s代替直接拼接字符串,彻底避免SQL注入问题,同时也能自动处理字符串的引号包裹:
conn = mysql.connector.connect( host=HOSTNAME, user=USERNAME, passwd=PASSWORD, database=DATABASE ) crsr = conn.cursor() # 定义SQL模板和参数列表 sql = "INSERT INTO ord (type, link, sitename, telgramname) VALUES (%s, %s, %s, %s)" values = ('dawdw', 'awdawd', 'awdwada', 'adwwa') # 执行参数化查询 crsr.execute(sql, values) conn.commit() crsr.close() conn.close()
内容的提问来源于stack exchange,提问作者Andrey
相关产品推荐
相关产品推荐

