首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何引用LuaSQL的值?

如何引用LuaSQL的值?
EN

Stack Overflow用户
提问于 2009-08-03 21:51:02
回答 3查看 4.2K关注 0票数 0

LuaSQL似乎是Lua中大多数SQL数据库系统的规范库,但似乎没有任何用于在查询中引用/转义值的工具。我正在编写一个使用SQLite作为后端的应用程序,并且我希望使用Python's DB-API指定的接口

代码语言:javascript
复制
c.execute('select * from stocks where symbol=?', t)

但我甚至会满足于一些更愚蠢的东西,比如:

代码语言:javascript
复制
conn:execute("select * from stocks where symbol=" + luasql.sqlite.quote(t))

还有没有其他的Lua库支持SQLite的引用?(LuaSQLite3似乎没有。)还是我错过了关于LuaSQL的某些东西?我担心滚动我自己的解决方案(使用正则表达式或其他东西)并使其出错。我应该只为sqlite3_snprintf编写一个包装器吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-08-04 00:16:11

我已经有一段时间没看过LuaSQL了,但上次我检查过它不支持它。我使用Lua-Sqlite3。

代码语言:javascript
复制
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
票数 4
EN

Stack Overflow用户

发布于 2009-08-04 02:13:09

与SQLite的任何其他低级绑定一样,LuaSQLite3也提供了带有可变参数的预准备语句;这些语句使用方法将值绑定到语句参数。由于SQLite不解释绑定值,因此根本不可能发生SQL注入。到目前为止,这是最安全(也是性能最好)的方法。

uroc显示了将绑定方法与预准备语句一起使用的示例。

票数 4
EN

Stack Overflow用户

发布于 2010-09-26 03:26:57

顺便说一下,在Lua SQL中,conn中的sqlite3驱动程序有一个未记录在案的转义函数: escape,其中conn是一个连接变量。

例如,使用以下代码

代码语言:javascript
复制
print ("con:escape works. test'test = "..con:escape("test'test"))

结果是:

代码语言:javascript
复制
con:escape works. test'test = test''test

我真的试过了,看看会有什么效果。显然,他们的postgres驱动程序也有这样的函数。我通过查看他们的测试发现了这个。

希望这能有所帮助。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1224806

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档