You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用luasql-sqlite3拼接SQLite语句时出现nil值拼接错误,问题何在?

Lua字符串拼接报错的原因及解决方法

你遇到的问题根本不是字符串拼接本身的问题,而是运算符优先级和括号范围搞错了。

看你出错的代码:

print(db:execute[[SELECT title FROM Table1 WHERE char1 =]] .. [[ "JI";]] )

Lua里函数调用的优先级比字符串拼接..高,所以这段代码会被Lua解析成:

(print(db:execute[[SELECT title FROM Table1 WHERE char1 =]])) .. [[ "JI";]]

也就是先执行db:execute传入不完整的SQL语句(SELECT title FROM Table1 WHERE char1 =),这时候SQL语法错误,execute返回nil;然后print打印这个nil,而print本身的返回值也是nil;最后你尝试把nil和后面的字符串拼接,自然就抛出attempt to concatenate a nil value的错误。

正确的写法是把拼接后的完整字符串作为execute的参数,需要给拼接表达式加上括号,确保先完成字符串拼接,再传给execute:

print(db:execute( [[SELECT title FROM Table1 WHERE char1 =]] .. [[ "JI";]] ))

或者更简洁的写法——Lua里相邻的字符串字面量会自动拼接,不需要..:

print(db:execute([[SELECT title FROM Table1 WHERE char1 =]] [[ "JI";]]))

另外提醒一句:直接拼接字符串写SQL存在注入风险,更安全的方式是用参数绑定:

local stmt = db:prepare("SELECT title FROM Table1 WHERE char1 = ?")
stmt:bind("JI")
local result = stmt:execute()
print(result)
stmt:close()

内容的提问来源于stack exchange,提问作者Nikulok

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 18:42:21