Python - 使用%d进行MySQL参数化查询

问题描述 投票:-4回答:1

这可能是一个已经回答的问题,但我没有发现任何与之相关的问题。

我想我可能有一个独特的场景,我需要在LIMIT子句的查询中添加一个参数。 Stack Overflow考虑:

query = "SELECT * FROM `v_someview` WHERE `id` = %s LIMIT %s;"
x.execute(query,(str(id_variable),str(limit_variable))

现在它回来了:

您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以便在第1行的“5”附近使用正确的语法

我应该使用%d还是不鼓励这种特殊用途?

注意:我绘制的这个限制变量的字段是tinyint,所以我没有看到任何SQL注入攻击,但我仍然希望使用参数化查询。

与%d一起使用会停止执行并绕过catch块:

try:
  query = """SELECT * FROM `v_someview` WHERE `id` = %s LIMIT %d;"""
  x.execute(query,(str(id),int(l)))
except Exception as ex:
  #some code

使用的库是MySQLi。 变量'x'是一个游标。 变量'id_variable'是带有id的int

mysql python-2.7
1个回答
0
投票

通过使用以下解决方案:

try:
  query = """SELECT * FROM `v_someview` WHERE `id` = %s LIMIT %s;"""
  x.execute(query,(str(id),int(l)))
except Exception as ex:
  #some code

所以我声明我将使用字符串(%s)但将该参数强制转换为int()。

© www.soinside.com 2019 - 2024. All rights reserved.