如何为LuaSQL引用值?
2009-8-3 21:51:2
收藏:0
阅读:365
评论:3
LuaSQL,似乎是 Lua 中大多数 SQL 数据库系统的规范库,似乎没有在查询中引用/转义值的功能。我正在编写一个使用 SQLite 作为后端的应用程序,我想用类似于 Python 的 DB-API 中指定的接口:
c.execute('select * from stocks where symbol=?', t)
但我甚至也可以接受更愚蠢的东西,比如:
conn:execute("select * from stocks where symbol=" + luasql.sqlite.quote(t))
是否有其他支持 SQLite 引用的 Lua 库?(LuaSQLite3 似乎没有。)或者是我错过了关于 LuaSQL 的某些东西? 我担心自己编写自己的解决方案(用正则表达式或其他方法),并出错。我应该只编写一个 sqlite3_snprintf 的包装器吗?
原文链接 https://stackoverflow.com/questions/1224806
点赞
stackoverflow用户33252
LuaSQLite3 以及其他低层 SQLite 绑定程序都使用支持变量参数的预处理语句。这些使用方法将值绑定到语句参数上。由于 SQLite 不会解释绑定的值,因此绝对不存在 SQL 注入的可能性。这是迄今为止最安全(也是最高效)的方法。
uroc
展示了使用预处理语句绑定方法的示例。
2009-08-04 02:13:09
stackoverflow用户17774
顺便提一句,在 Lua SQL 中,sqlite3 驱动程序中有一个未记录的转义函数,名为 conn:escape
,其中 conn
是连接变量。
例如,通过以下代码:
print ("con:escape works. test'test = "..con:escape("test'test"))
得到的结果是:
con:escape works. test'test = test''test
我实际上尝试了一下,看看它会做什么。显然,他们的 postgres 驱动程序也有这样的函数。我是通过查看他们的测试找到这个函数的。
希望这能有所帮助。
2010-09-25 19:26:56
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
我已经有一段时间没看 LuaSQL 了,但上次我检查它的时候不支持它。我使用了 Lua-Sqlite3。
require("sqlite3") db = sqlite3.open_memory() db:exec[[ CREATE TABLE tbl( first_name TEXT, last_name TEXT ); ]] stmt = db:prepare[[ INSERT INTO tbl(first_name, last_name) VALUES(:first_name, :last_name) ]] stmt:bind({first_name="hawkeye", last_name="pierce"}):exec() stmt:bind({first_name="henry", last_name="blake"}):exec() for r in db:rows("SELECT * FROM tbl") do print(r.first_name,r.last_name) end