為了防止 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