为了防止 SQL 注入,开发人员在将 SQLite3 与 Python 2.5 结合使用时遇到错误。当采用推荐的“?”时为了防止注入的参数替换,他们面临以下困境:
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 8 supplied.
此问题似乎源于数据库的初始创建,其中包含 8 个绑定。但是,对每个项目名称使用不太安全的“%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 中安全高效地检索数据。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3