【发布时间】:2011-09-13 04:41:25
【问题描述】:
我需要一种方法来转义 lua 中 mysql 语句的数据。我习惯于在 php 中执行类似 mysql_real_escape_string() 的操作,但在使用 mysql 的 lua 中找不到等效项(当我使用 sqlite3 时,con:escape() 有效)。我读过准备好的陈述是一种解决方案,但它似乎对我不起作用。我做错了什么?
require "luasql.mysql"
env = assert (luasql.mysql())
con = env:connect("db_name", "user", "pass", "localhost")
local stmt = con:prepare([[
SELECT * FROM `user`
WHERE `login` = :a AND `pass` = :b LIMIT 1
]])
stmt.a = "some_user"
stmt.b = "some_pass"
此错误与“尝试调用方法 'prepare'(一个 nil 值)”有关。
如果我尝试在 con 上直接运行 SELECT * execute ,它工作正常,因此正在建立连接,但是这个 prepare 语句不起作用(它甚至没有将 prepare 识别为有效方法,似乎)。
【问题讨论】:
-
连接成功了吗?如果连接失败,使用
assert(env:connect...失败。 -
@B,错误信息表示没有'prepare'方法,并不是说conn为nil。
-
您确定有“准备”方法吗?我在keplerproject.org/luasql/manual.html#connection_object中找不到一个
-
我已经看到它在一些地方使用过(比如这里:lists.luaforge.net/pipermail/kepler-project/2006-April/…),并被描述为使用 luasql 防止注入的一种方法。如果 escape 与 mysql 一起使用,我不介意忽略准备,但它似乎不是(虽然使用 sqlite3 )。最终我只想做最好的方法是使用 lua 和 mysql 来转义数据,不管是什么。