2014-07-04 80 views
-1

我想通過mysql代理連接到使用LuaSql的mysql服務器。我試圖執行一個簡單的程序(db.lua):錯誤:錯誤的參數#1到'插入'(表預期,得到零)

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'或以前的錯誤加載模塊「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 
+0

這是什麼意思:「與mysql-proxy連接」?這是一個模塊嗎?腳本?你如何使用它? – Schollii

+0

@Schollii它是一個lua腳本(db.lua),我在我的mysql-proxy.cnf文件中指定了mysql proxy.I通過mysql代理使用它從mysql-proxy訪問mysql服務器..我清楚了嗎? – robin

+0

根據[mysql-proxy文檔](http://dev.mysql.com/doc/refman/5.0/en/mysql-proxy-scripting-read-query.html)和您發佈的代碼,我猜測您正在嘗試編寫mysql-proxy腳本,而不是通過mysql代理連接到mysll服務器。在那種情況下,你的意思是「當我在沒有myql-proxy的情況下執行它們時執行得很好」。您收到的錯誤意味着代理不會創建CUR_METHODS表。是什麼讓你認爲從代理內部創建數據庫連接是允許的? – Schollii

回答

1

正如我在以前的評論指出,該錯誤表明table.insert (CUR_METHODS, ...)是得到一個零爲第一個參。由於第一個參數是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的文件夾的路徑以及該文件夾的內容。

+0

但mysql.so存在於特定的位置。我指定了mysql-proxy.cnf中LUA_CPATH.But的路徑仍然是相同的錯誤。 – robin

+1

@robin你接受了這個答案,但你最後的評論表明問題仍然存在,你能澄清一下什麼是實際狀態嗎? – Schollii

+0

狀態是即使在更改LUA_CPATH之後也存在相同的錯誤。 – robin

相關問題