Ошибка: неверный аргумент №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: неверный аргумент #1 для "вставки" (таблица ожидалась, получил ноль) 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 ответ

Как указано в моем предыдущем комментарии, ошибка указывает на то, что table.insert (CUR_METHODS, ...) получает ноль в качестве первого аргумента. Так как первый аргумент CUR_METHODS, это означает, что этот объект CUR_METHODS еще не определено. Так как это происходит в верхней части luasql.mysql модуль, я думаю, что luasql инициализация была неполной, возможно, потому что DLL MySQL не была найдена. Я думаю, что LUA_CPATH не находит MySQL DLL для luasql, но я удивлен, что вы не получите ошибку пакета, поэтому происходит что-то странное. Вам придется копаться в luasql модуль и файл C, чтобы выяснить, почему он не создается.

Обновление: поочередно обновите свой пост, чтобы показать вывод print("LUA path:", package.path) а также print("LUA path:", package.cpath) из вашего скрипта mysql-proxy, а также покажите путь к папке, где установлен luasql, и содержимое этой папки.

Другие вопросы по тегам