2012-12-26 42 views
3

我是新來的,所以我首先想打個招呼。Lua SQLite3更新值

我的問題是,我正在Lua工作,當我想更新數據庫中的值時,它需要動態地(由用戶)完成。

當數據庫中的值等於1時,用戶可能希望將其更改爲0(當他將bloom設置爲關閉時)。

我能做到這一點很難通過編碼:

for test in db:nrows("UPDATE test SET bloom = 1 WHERE bloom = 0") do 

我想允許用戶更改該值。但我該怎麼做? 我已經對此有一個佔位符是

local bloom = 0 

回答

3

使用佔位符,因爲您應該基於用戶輸入的任何查詢來避免將數據作爲命令(又名SQL注入)傳遞。

local stmt = db:prepare[[ 
    UPDATE test SET bloom = ? WHERE bloom = ? 
]] 
stmt:bind(new_bloom, previous_bloom) 
stmt:exec() 
0

我想你知道如何在你的程序從用戶獲取的價值,你可以再建一個字符串動態傳遞到SQL因此,例如

local sql = string.format([["UPDATE test SET bloom = 1 WHERE bloom = %s"]],bloom) 
local res = assert(db:execute(sql)) 

我通常使用執行update語句而不是nrows。

+3

用戶,遇到SQL注入。 SQL注入,滿足用戶。 –