【问题标题】:Lua mysql, need a way to escape dataLua mysql,需要一种方法来转义数据
【发布时间】: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 来转义数据,不管是什么。

标签: mysql lua luasql


【解决方案1】:

看起来prepare 功能是在过去一两年内添加到 LuaSQL 中的,所以您的版本可能有点旧?

另外,尝试con:escape(yourQuery) 进行转义,也许这足以满足您的需求。

【讨论】:

  • 我最近才开始学习 Lua(在过去几周内)并开始使用 lua for windows install - LuaForWindows_v5.1.4-40。你知道那个版本是否在 LuaSQL 中有准备功能吗?最新的是-43。至于 con:escape,当我这样做时: username = con:escape(username) - 它会抛出与调用 prepare 相同的“尝试调用方法 'escape'(一个 nil 值)”。 :escape() 虽然可以使用 sqlite3,但不能使用 mysql(但请注意,prepare 也不能使用 sqlite3)。
  • 这个页面:code.google.com/p/luaforwindows 说 LuaSQL 2.1.1 是他们打包的,这个页面:keplerproject.org/luasql/history.html 说 2.1.1 是从 2007 年开始的。所以解决方案可能是将你的 LuaSQL 更新到 2.2使用 LuaRocks(幸运的是它是 LuaForWindows 的一部分)。希望升级不会很痛苦(我自己从未在 Windows 上使用过 Lua)。
  • 好吧,我花了一整天的时间尝试使用 luarocks 升级 luasql,但仍然没有成功。首先,我必须安装一个独立版本的 mysql 并将 MYSQL_DIR 指向一个 mysql.h 头文件。然后我必须安装 Visual Studio 2010 并从 vs 命令提示符运行 luarocks 命令。在这里,我遇到了另一个模糊的错误“编译对象 src/ls_mysql.obj 失败”,因为它在 mysql.h 文件中出现了大量错误。我已经习惯了在谷歌搜索后几分钟内修复 php 问题,但到目前为止,lua 还没有运气。但是,这个答案可能是正确的(需要升级),所以将其标记为这样。
猜你喜欢
  • 2020-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-25
相关资源
最近更新 更多