我正在尝试运行一个包含许多参数的存储过程。为此,我正在使用pyodbc
库及其cursor.execute
函数
以下是我正在尝试执行的查询:
executionStr = "EXEC ? @ImportJSON= ?, ?=?, ?=?, ?=?",procName, data, param1, param1Value, param2, param2Value, param3, param3Value
当我运行查询时,它会给我一个错误
TypeError: The first argument to execute must be a string or unicode query.
当我尝试按如下方式运行查询时,它会成功执行,并且我可以看到数据进入
executionStr = "EXEC "+procName+" @ImportJSON='"+data+"', "+param1+"='"+param1Value+"' , "+param2+"='"+param2Value+"' , "+param3+"='"+param3Value+"';"
我正在尝试以前面的格式运行查询,以便保护代码不受SQL注入的影响
我还尝试使用如下参数运行查询,但给出了相同的错误:
preexe = "EXEC ? @ImportJSON= ?, "+param1+"=?, "+param2+"=?, "+param3+"=?"
procedure_cursor.execute(preexe,(procName, data, param1Value, param2Value, param3Value))
我不知道我做错了什么,也不知道我会做错什么。任何帮助都将不胜感激
先谢谢你
您上次的尝试是正确的,但参数只能用于传递数据值(例如字符串、数字、日期等),而不能用于传递数据库对象名称(例如表名、列名、存储过程名等)。因此,您需要执行以下操作:
如果代码能够完全控制
procName
、param1
、param2
和param3
的值,那么这不会造成SQL注入的重大风险相关问题 更多 >
编程相关推荐