这个问题在这里已经有了答案:
mysql/python->语句中占位符的语法错误(1个答案)
两年前关门了。
import mysql.connector
config = {
'user': 'root',
'password': '*******',
'host': '127.0.0.1',
'database': 'mydb',
'raise_on_warnings': True
}
cnx = mysql.connector.connect(**config)
cursor = cnx.cursor()
find_user = ("SELECT * FROM HM_Login WHERE Username = '%s' ")
data_Pupil = {
'Username': "GJM"
}
cursor.execute(find_user, data_Pupil)
lit = cursor.fetchall()
print(lit)
cursor.close()
cnx.close()
我有一个可以工作的数据库,当我在数据库中插入%s时,在尝试搜索数据库并从一列中提取一行时遇到了一个问题%s工作得很好,但现在只有当我在查询中有一个值时它才能工作。这是使用mysql connector for python。
mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
我得到这个错误,这是非常有见地的,没有任何帮助,如果有什么你可以做,以帮助它将意味着很多。
2条答案
按热度按时间u3r8eeie1#
占位符语法用于位置参数,但您使用了字典。将其替换为元组:
mrphzbgm2#
正如错误陈述所说。您有一个sql错误。您正试图输入一个变量作为位置参数,但在变量“place”上使用了字典。
相反,您应该将%s用于变量和带有变量的元组,然后执行以下操作:
也可以使用字典,但你不应该。尽管如此,我还是要在这里展示它,因为我必须深入研究解释来理解原因。
上面的内容为sql注入打开了大门,正如我在评论中所说的——下面是原因;假设我们有一个与以下相同的用户名:
这将导致sql查询删除表。
避免如上所述的sql注入。使用第一种解决方案