8
我試圖通過Python 2.6改變SQLite數據庫的user_version
,我已經盡力做到以下幾點:不能在PRAGMA中使用sqlite3參數替換?
cur.execute("PRAGMA user_version = ?" , (version,))
它失敗,出現以下錯誤:
cur.execute("PRAGMA user_version = ?" , (version,))
sqlite3.OperationalError: near "?": syntax error
我已經嘗試了替代的命名風格(而不是問號),但是也失敗了,並且出現了同樣的錯誤。
如果我在那裏放入一個數字作爲SQL字符串的一部分,或者使用Python的字符串操作,它都可以正常工作,但是我寧願不要這樣做。
那麼,爲什麼這不工作?
我該如何安全地將變量中的數字插入此調用中?
好吧,我想,可能是這樣。那麼我該如何安全地插入值?如果它的唯一內部用法是簡單字符串concat或Python的%在這裏可以接受? – DMA57361
當參數爲整數時,這是處理限制的好方法。如果另一個編譯指示的參數是一個字符串,則不需要驗證格式(例如,像7那樣的整數有效爲「7」),但參數仍然需要轉義以避免SQL注入。有沒有方便的方法呢? – spaaarky21
@ spaaarky21:我不知道sqlite3提供的任何函數來進行手動引用。對於接受字符串的其他編譯指示,最安全的方法可能是列舉可接受輸入的白名單,並根據此集合檢查用戶輸入。 – unutbu