我是新来的,所以我首先想打个招呼。
我的问题是,我正在 Lua 中开发游戏,例如,当我想更新数据库中的值时,需要动态完成(由用户)。
当数据库中的值等于 1 时,用户可能希望将其更改为 0(当他将
bloom
设置为关闭时)。
我可以使用以下方法进行硬编码:
for test in db:nrows("UPDATE test SET bloom = 1 WHERE bloom = 0") do
我想允许用户更改该值。但我该怎么做呢? 我已经为此准备了一个占位符,即
local bloom = 0
使用占位符,就像处理基于用户输入的任何查询一样,以避免将数据作为命令传递(也称为 SQL 注入)。
local stmt = db:prepare[[
UPDATE test SET bloom = ? WHERE bloom = ?
]]
stmt:bind(new_bloom, previous_bloom)
stmt:exec()
我假设您知道如何从用户那里捕获程序中的值,然后您可以动态构建一个字符串以传递给 SQL,例如
local sql = string.format([["UPDATE test SET bloom = 1 WHERE bloom = %s"]],bloom)
local res = assert(db:execute(sql))
我通常使用execute 来更新语句而不是nrows。
与
lsqlite3
0.9.6-1:
local stmt = [[ UPDATE test SET bloom = ? WHERE bloom = ? ]]
stmt:bind_values(new_bloom, previous_bloom)
stmt:step()
stmt:finalize()
lsqlite3
的示例目录中有有用的示例。