-1

我正在尝试通过 mysql 代理使用 LuaSql 连接到 mysql 服务器。我尝试执行一个简单的程序(db.lua):

require("luasql.mysql")
local _sqlEnv = assert(luasql.mysql())
local _con = nil

function read_auth(auth)
local host, port = string.match(proxy.backends[1].address, "(.*):(.*)")
_con = assert(_sqlEnv:connect( "db_name", "username", "password", "hostname", "3306"))
end 

function disconnect_client()
assert(_con:close())
end 

function read_query(packet)
local cur = con:execute("select * from t1")
myTable = {}
row = cur:fetch(myTable, "a") 
print(myTable.id,myTable.user)
end

当我在没有mysql-proxy. 当我使用 mysql-proxy 连接时,错误日志显示以下错误:

mysql.lua:8: 'insert' 的参数 #1 错误(表预期,得到 nil) db.lua:1: 循环或先前错误加载模块'luasql.mysql'

mysql.lua 是 LuaSql 的默认文件:

---------------------------------------------------------------------
-- MySQL specific tests and configurations.
-- $Id: mysql.lua,v 1.4 2006/01/25 20:28:30 tomas Exp $
---------------------------------------------------------------------

QUERYING_STRING_TYPE_NAME = "binary(65535)"

table.insert (CUR_METHODS, "numrows")
table.insert (EXTENSIONS, numrows)

---------------------------------------------------------------------
-- Build SQL command to create the test table.
---------------------------------------------------------------------
local _define_table = define_table
function define_table (n)
        return _define_table(n) .. " TYPE = InnoDB;"
end

---------------------------------------------------------------------
-- MySQL versions 4.0.x do not implement rollback.
---------------------------------------------------------------------
local _rollback = rollback
function rollback ()
        if luasql._MYSQLVERSION and string.sub(luasql._MYSQLVERSION, 1, 3) == "4.0" then
                io.write("skipping rollback test (mysql version 4.0.x)")
                return
        else
                _rollback ()
        end
end
4

1 回答 1

1

正如我之前的评论中所述,该错误表明将table.insert (CUR_METHODS, ...)nil 作为第一个参数。由于第一个 arg 是CUR_METHODS,这意味着该对象CUR_METHODS尚未定义。由于这发生在luasql.mysql模块顶部附近,我的猜测是luasql初始化不完整,可能是因为找不到 mysql DLL。我的猜测是LUA_CPATH找不到 luasql 的 MySQL DLL,但我很惊讶你不会收到包错误,所以发生了一些奇怪的事情。您必须深入研究luasql模块和 C 文件以找出它没有被创建的原因。

更新:或者,更新您的帖子以显示 mysql-proxy 脚本的输出print("LUA path:", package.path)print("LUA path:", package.cpath)来自 mysql-proxy 脚本的输出,并显示安装 luasql 的文件夹的路径和该文件夹的内容。

于 2014-07-19T14:58:26.210 回答