我想逃避例如lua中的单引号:
我的脚本到目前为止使用sqlite获取mysql表的一些数据:
local sqlCmd = string.format([[INSERT INTO temp_storage
SET gID = '%s'
]], gID)
问题是gID
也可以包含单引号'
但是sql语句包含错误。
如何防止这种情况?我并不是真的在寻找一种搜索和替换的方法 - 更多的是替换内置函数,以便sql仍然有效。
答案 0 :(得分:2)
我们缺少一些关于如何在sqlite3 db上执行查询的信息,您使用哪个库?
其次,连接字符串'是不安全的。将在db上执行,这可能会导致sql_injection。 这样做的安全方法是绑定参数,并告诉他们。数据库将输入视为param 仅,与之前的方式相反。
来自我为此目的所知的库,LuaSQLite3将完成这项工作(在代码中表示为" lsqlite3"。)
您使用的基本API是:
local sqlite3 = require("lsqlite3")
local db = sqlite3.open_memory()
gID = 6
local insert_stmt = assert( db:prepare("INSERT INTO temp_storage SET gID = ?") )
insert_stmt:bind_values(gID)
insert_stmt:step()
insert_stmt:reset()
我修改了其中一个官方示例(" statement.lua")。