【发布时间】:2015-05-25 22:02:34
【问题描述】:
我有一个问题,我有一个进行选择查询的代码:
loginquery = "SELECT * from User "
loginquery = loginquery + "WHERE UserName="+ loginVar.get() +" AND Password="+ passVar.get()+""
问题在于结果是 SELECT * from User WHERE UserName= AND Password=
我该如何解决这个问题?
编辑:::::
这是我的代码
loginquery = ("SELECT * from User "
"WHERE UserName=%s AND Password=%s")
bobby = (loginVar.get(),passVar.get())
我愿意
(query.execute(loginquery % bobby)
我的打印结果是:
SELECT * from User WHERE UserName=usernameentered AND Password=passwordentered
然而mysql连接器出现了这个错误:
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 'AND Password=' at line 1
这是为什么呢?
【问题讨论】:
-
你能说得更具体些吗
-
@davi 他在谈论一种特定类型的 SQL 攻击,你也让自己容易受到攻击。如果恶意用户拥有凭据并且知道您的表名,他可以将
loginVar设置为他的用户名,并将passVar设置为<password>; DROP TABLE <tablename>;,您的代码将删除整个表。 -
我明白这一点,但现在我不想让它安全,我只是想让它工作
-
嗯,你没有用分号结束你的查询,所以这就是问题......
-
没有结束我只是用分号和同样的错误结束了它@Adam Smith
标签: python mysql python-3.4