我有一些通过 python mysqldb 到我的 mysql 数据库工作的 sql 查询,但我想让它们少一点 sql-injection 漏洞,所以小 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))
我最近在我的网络服务器日志上遇到了这个错误,但请注意,由于我一直在尝试许多不同的事情,因为它之前没有出错,这可能是一个重头戏:(错误是指上述尝试传递“参数”变量)
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 文档有多垃圾。