This question already has answers here:
When to use single quotes, double quotes, and backticks in MySQL
                                
                                    (12个答案)
                                
                        
                                2年前关闭。
            
                    
我正在尝试基于密码输入创建访问控制系统。我在如何检查输入的密码是否在MySQL数据库中存在问题。

下面的代码段有效,它要求输入密码,并且当密码仅包含数字时,它可以与数据库成功解析。

pin_inp = raw_input("Enter PIN: ")
cursor.execute("SELECT COUNT(1) FROM members WHERE pincode = " + pin_inp + ";")


但我想使用字母数字密码。我以为我可以将pincode列创建为VARCHAR并输入字母数字pincode,但是这样就无法与数据库成功解析。使用字母数字输入时,出现此错误:


  _mysql_exceptions.OperationalError:(1054,“'where子句'中的未知列'7988DB'”)


因此,我在members表中有几行用于测试,有些行的列pincode中包含数值,有些行具有字母数字值。当我运行上述代码时,数字输入正常,但字母数字值会引发1054错误。

最佳答案

使用数字值时,就像输入数字一样,但是使用字母数字值时,必须用撇号将它们括起来,例如'my value'。因此,将您的代码更改为:

cursor.execute("SELECT COUNT(1) FROM members WHERE pincode = '" + pin_inp + "';")


但是,请注意此处。由于pin_inp来自用户的输入,因此该代码将对SQL注入开放。您要么必须对其进行验证,要么更好地使用parameterized SQL statement

07-26 03:39