代码之家  ›  专栏  ›  技术社区  ›  Clauric

将用户值传递给WHERE子句

  •  2
  • Clauric  · 技术社区  · 5 年前

    我试图将两个用户输入值的组合传递到 WHERE

    我现在的密码是:

    sign_input = input("Please enter <, =, > for population check ")
    Pop_Lim = input("Please input a number for population parameter ")
    
    Where_Limit = sign_input +" "+ Pop_Lim
    
    conn = psq.connect("localhost","root","root","City",cursorclass=psq.cursors.DictCursor)
    
    query = "SELECT * FROM city Where Population %s"
    
    with conn:
        cursor = conn.cursor()
        cursor.execute(query, Where_Limit)
        city = cursor.fetchall()
        for row in city:
            print(row["ID"], row["Name"]," :   ",row["CountryCode"]," :   ",row["District"]," :   ",row["Population"])     # insert spacers for legibility purposes
    

    错误是说我认为Where_Limit变量有问题。

    关于如何解决这个问题或将符号和总体变量传递给 Where SQL命令中的函数?

    1 回复  |  直到 5 年前
        1
  •  2
  •   Solomon Ucko    5 年前

    如果允许的话,可能会有安全风险。首先,制造 当然 在服务器上 sign_input 是其中之一 < , = > . 那么 ,您可以使用字符串连接( query = "SELECT * FROM city Where Population " + sign_input + " %s" if / elif 声明:

    if sign_input == '<':
        query = "SELECT * FROM city Where Population < %s"
    elif sign_input == '=':
        query = "SELECT * FROM city Where Population = %s"
    elif sign_input == '>':
        query = "SELECT * FROM city Where Population > %s"
    

    连接较短且重复性较低,但更容易确保 / 否则如果 有固定字符串的链是安全的。使用不同的法律价值观 符号输入 如果 / 链子。