mysql/python连接器无法搜索

sigwle7e  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(503)

这个问题在这里已经有了答案

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

我得到这个错误,这是非常有见地的,没有任何帮助,如果有什么你可以做,以帮助它将意味着很多。

u3r8eeie

u3r8eeie1#

占位符语法用于位置参数,但您使用了字典。将其替换为元组:

find_user = ("SELECT * FROM HM_Login WHERE Username = %s")
data_pupil = ('GJM',)
cursor.execute(find_user, data_Pupil)
mrphzbgm

mrphzbgm2#

正如错误陈述所说。您有一个sql错误。您正试图输入一个变量作为位置参数,但在变量“place”上使用了字典。
相反,您应该将%s用于变量和带有变量的元组,然后执行以下操作:

find_user = "SELECT * FROM HM_Login WHERE Username = %s"
data_Pupil = ('GJM',)
cursor.execute(find_user, data_Pupil)

也可以使用字典,但你不应该。尽管如此,我还是要在这里展示它,因为我必须深入研究解释来理解原因。

find_user = "SELECT * FROM HM_Login WHERE Username = '{Username}'".format(**data_Pupil)
data_Pupil = {
    'Username': "GJM"
    }

上面的内容为sql注入打开了大门,正如我在评论中所说的——下面是原因;假设我们有一个与以下相同的用户名:

username = "'MR SQL Injection');DROP TABLE HM_Login;"

这将导致sql查询删除表。

SELECT * FROM HM_Login WHERE Username = 'MR SQL Injection');DROP TABLE HM_Login;

避免如上所述的sql注入。使用第一种解决方案

相关问题