如何报价值LuaSQL?(How to quote values for LuaSQL?)

2019-06-27 18:02发布

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 ?

Answer 1:

我没有看过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


Answer 2:

LuaSQLite3以及一个任何其它低水平结合的SQLite提供具有可变参数准备的语句; 这些使用方法来值绑定到语句参数。 由于SQLite不解释绑定值,是根本不存在SQL注入的可能性。 这是迄今为止最安全(和表现最好的)的做法。

uroc示出了使用与准备语句绑定方法的一个例子。



Answer 3:

通过在Lua SQL的方式存在于conn的sqlite3的司机无证逃生功能:逃避其中conn是连接变量。

例如与代码

print ("con:escape works. test'test = "..con:escape("test'test"))

其结果是:

con:escape works. test'test = test''test

其实,我试过了,看看它会怎么做。 显然也有其Postgres的司机这样的功能了。 我通过观察他们的测试中发现这一点。

希望这可以帮助。



文章来源: How to quote values for LuaSQL?