这可能是一个已经回答的问题,但我没有发现任何与之相关的问题。
我想我可能有一个独特的场景,我需要在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
通过使用以下解决方案:
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()。