为了防止 SQL 注入,开发人员在将 SQLite3 与 Python 2.5 结合使用时遇到错误。当采用推荐的“?”时参数替换以防止注入,他们面临以下困境:
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 8 supplied.
这个问题似乎源于数据库的初始创建,其中包含八个绑定。然而,使用不太安全的“%s”替换每个项目名称解决了这个问题。
for item in self.inventory_names: self.cursor.execute("SELECT weight FROM Equipment WHERE name = '%s'" % item) self.cursor.close()
解决这个困惑的方法在于理解 Cursor.execute() 方法需要一个序列作为它的第二个范围。在本例中,开发人员提供的字符串恰好有八个字符长。为了纠正这个问题,应该实现以下代码修改:
self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", [item])
通过遵循此参数规范,可以有效解决该问题,从而可以安全高效地从 SQLite3 检索数据。
以上是在 Python 中使用 SQLite3 时,为什么在使用'?”参数替换时出现'提供的绑定数量不正确”?的详细内容。更多信息请关注PHP中文网其他相关文章!