我有一些sql查询可以通过python mysqldb运行到mysql数据库中,但是我想让它们少一点sql注入漏洞,这样小bobby表就不会试图添加数据。。
例如:
原件:
(这有效,因此ListID等绝对有效)sql="SELECT NAME FROM ListsTable WHERE ID=%s"%(ListID)
c.execute(sql)
尝试使用元组:sql="SELECT NAME FROM ListsTable WHERE ID=%s"
c.execute(sql,(ListID,))
有效:sql="SELECT NAME FROM ListsTable WHERE ID=%s"
c.execute(sql, ListID)
我不知道为什么第二次尝试不作为元组工作,而是作为一个参数接受它,但是无论是哪种方式,对于另一个语句,我都需要传递多个参数,这样就不起作用:
原件:sql="SELECT * FROM ListsTable ORDER BY ID DESC LIMIT %s,%s"%(Page, (Page*20)+20)
c.execute(sql)
如果我尝试以元组的形式发送参数,那么这个方法仍然有效:sql="SELECT * FROM ListsTable ORDER BY ID DESC LIMIT %s,%s"
var1=Page
var2=(Page*20)+20
params=(var1,var2)
c.execute(sql,params)
甚至只是sql="SELECT * FROM ListsTable ORDER BY ID DESC LIMIT %s,%s"
c.execute(sql,(Page,(Page*20)+20))
我最近在我的webserver日志中发现了这个错误,不过请注意,这可能是一个redhering,因为我尝试了很多不同的东西,因为它以前没有出现过错误:(这个错误是指上面传递“params”变量的尝试)File "process.py", line 98, in main
c.execute(sql,params)
File "/var/www/cgi-bin/MySQLdb/cursors.py", line 159, in execute
query = query % db.literal(args)
TypeError: not enough arguments for format string
编辑:如果有帮助的话,我正在使用mysqldb版本1.2.3,以防它不接受该版本的元组,但不要让我开始了解mysqldb文档是多么垃圾。。