Ошибка: неверный аргумент №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, и содержимое этой папки.