gpt4 book ai didi

python - 在 python 中将 Tuple 传递给 MySQLdb 时出现问题

转载 作者:太空狗 更新时间:2023-10-30 03:07:12 26 4
gpt4 key购买 nike

我有一些通过 python mysqldb 到我的 mysql 数据库的 sql 查询,但我想让它们少一点 sql 注入(inject)漏洞,所以小 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))

我最近在我的网络服务器日志中遇到了这个错误,但请注意这可能是一个 redherring,因为我一直在尝试许多不同的事情,因为它之前没有出错:(错误指的是上面的尝试传递“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 文档有多垃圾..

最佳答案

肯定是你的 mysqldb 版本有问题。

http://mysql-python.hg.sourceforge.net/hgweb/mysql-python/MySQLdb-2.0/file/5a7c30cd9de2/MySQLdb/cursors.py#l180

更改为:

1.51 -        if args is not None:
1.52 - query = query % self.connection.literal(args)
1.53 try:
1.54 + if args is not None:
1.55 + query = query % tuple(map(self.connection.literal, args))

http://mysql-python.hg.sourceforge.net/hgweb/mysql-python/MySQLdb-2.0/diff/98d968f5af11/MySQLdb/cursors.py

后来改为:

1.144 -                query = query % tuple(map(self.connection.literal, args))
1.145 + query = query % tuple(( get_codec(a, self.encoders)(db, a) for a in args ))

http://mysql-python.hg.sourceforge.net/hgweb/mysql-python/MySQLdb-2.0/diff/d9bb912776a5/MySQLdb/cursors.py#l1.144

关于python - 在 python 中将 Tuple 传递给 MySQLdb 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5798087/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com