【问题标题】:Lua string.format escapingLua string.format 转义
【发布时间】:2016-02-29 16:35:59
【问题描述】:

我想转义例如lua中的单引号:

到目前为止,我的脚本使用 sqlite 获取 mysql 表的一些数据:

local sqlCmd = string.format([[INSERT INTO temp_storage
SET     gID = '%s'
]], gID)

问题是gID也可以包含单引号'但是sql语句包含错误。

如何防止这种情况?我并不是真的在寻找一种搜索和替换的方法 - 更多的是用于替换的内置函数,以便 sql 仍然有效。

【问题讨论】:

  • 这称为查询参数化,您可以查看正在使用的任何 SQL 客户端,例如stackoverflow.com/questions/1224806/…
  • 谢谢,我更新了。关于mysql。
  • SQLLite 和 MySQL 不是一回事

标签: mysql lua


【解决方案1】:

我们缺少一些关于您如何在 sqlite3 db 上执行查询的信息,您使用哪个库?

其次,连接将在数据库上执行的“字符串”是不安全的,这可能导致sql_injection。 执行此操作的安全方法是绑定参数,这“告诉”数据库将输入视为参数only,与以前的方式相反。

从我知道的为此目的的库中,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”)。

【讨论】:

    猜你喜欢
    • 2013-08-10
    • 2010-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 1970-01-01
    相关资源
    最近更新 更多