错误:错误的参数#1到'insert'(表格预期,为零)

时间:2014-07-04 06:15:16

标签: mysql lua mysql-proxy luasql

我试图通过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:错误的参数#1到'insert'(表预期,得到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

1 个答案:

答案 0 :(得分:1)

正如我之前的评论中所述,错误表明table.insert (CUR_METHODS, ...)在第一个arg中获得了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)的输出,并显示安装luasql的文件夹的路径以及该文件夹的内容。