Lua SQLite3 更新值

问题描述 投票:0回答:3

我是新来的,所以我首先想打个招呼。

我的问题是,我正在 Lua 中开发游戏,例如,当我想更新数据库中的值时,需要动态完成(由用户)。

当数据库中的值等于 1 时,用户可能希望将其更改为 0(当他将

bloom
设置为关闭时)。

我可以使用以下方法进行硬编码:

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

我想允许用户更改该值。但我该怎么做呢? 我已经为此准备了一个占位符,即

local bloom = 0
sqlite lua
3个回答
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))

我通常使用execute 来更新语句而不是nrows。


0
投票

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
的示例目录中有有用的示例。

© www.soinside.com 2019 - 2024. All rights reserved.