【问题标题】:MySQL ProgrammingError on simple SELECT query with user-provided input使用用户提供的输入进行简单 SELECT 查询的 MySQL ProgrammingError
【发布时间】:2021-01-01 19:16:41
【问题描述】:
def search():
    searc = input("Enter the name you want to search: ")
    s = (searc)
    mycursor.execute("SELECT * FROM studen WHERE Name = {}".format(s))
    for i in mycursor:
        print(i)

我正在尝试从用户输入名称的studen 表中获取数据。

这是我得到的错误:

错误:mysql.connector.errors.ProgrammingError:1054 (42S22):“where 子句”中的未知列“ayush”

【问题讨论】:

    标签: python mysql


    【解决方案1】:

    直接的问题是您的查询缺少引号。假设ayush 是您的输入,您使用.format() 获得的字符串如下所示:

    SELECT * FROM studen WHERE Name = ayush
    

    但它需要看起来像这样:

    SELECT * FROM studen WHERE Name = 'ayush'
    

    但是,您根本不应该使用 .format(),因为它会让您对 SQL injection 敞开大门。

    This is the proper way to parametrize a query using mysql.connector:

    mycursor.execute("SELECT * FROM studen WHERE Name = %s", (s,))
    

    还要注意我在这里使用了(s,) 而不是(s) to get a tuple of one element

    【讨论】:

    • 是的,它有效。我实际上在一天前尝试了你的代码,但我没有写这个 (s ,),而是写了没有逗号的 (s)。感谢您的帮助。
    • 不客气,@connerito。如果这回答了您的问题,请记得点击✔ 发送至accept it。这标志着您的问题已在数据库中得到解决,这大大增加了这将帮助其他用户的机会。它还奖励我们双方的声望点数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-26
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    相关资源
    最近更新 更多