Sok helyen hibásan szerepel az eredetileg általam szült sql lib, így ideje hogy hibátlanul is felkerüljön a fórumra:
db_user="mt2"
db_pass="mt2"
db_host="localhost"
function mysql_select(query,notselect)
local tmp=number(11111111,99999999)
os.execute('mysql -h '..db_host..' -u '..db_user..' -p'..db_pass..' -N -e '..string.format("%q",query)..' 2>&1 > /tmp/'..tmp)
if not notselect then
local res,i={},1
local f,e=io.open("/tmp/"..tmp)
if f then
local line=f:read("*l")
while line do
res[i]={}
string.gsub(line,"([^\t]+)\t*", function(s)
table.insert(res[i],s)
end)
i=i+1
line=f:read("*l")
end
f:close()
os.execute("rm /tmp/"..tmp)
end
return res
end
end
function mysql_notselect(query)
return mysql_select(query,true)
end
mysql_query = mysql_select
questlib.lua végére érdemes beszúrni, megadni a mysql adatokat (db_user, db_pass, db_host) és már lehet is örülni. Az eredményeket egy tömbben adja vissza.
Példa a használatra:
local rows = mysql_query("SELECT * FROM test.test")
for i, v in ipairs(rows) do
print(table.concat(v,"\t"))
end
end
Hanashi mysql megoldásával (http://www.elitepvpers.com/forum/metin2-pserver-guides-strategies/1562959-release-mysql-schnittstelle-f-r-quests.html) is kompatibilis KIVÉVE hogy nincs hibaüzenet probléma esetén ÉS hogy ez mindent stringben ad vissza, így a típusokra oda kell figyelni a questben. Pl relációban nem szereti a Lua a stringeket :)
A másik (az elterjedt) megoldás, ami nem tömbben adja vissza az eredményt, hanem egy iterátorként. Hátránya, hogy csak 1 változó szerepelhet a select-ben, vagy utána magunknak kell gondoskodni az adatok feldolgozásáról.
db_user="mt2"
db_pass="mt2"
db_host="localhost"
function mysql_query(text)
local tmp=number(11111111,99999999)
os.execute('mysql h '..db_host..' -u '..db_user..' -p'..db_pass..' -N -e '..text..' 2>&1 > /tmp/'..tmp)
local f,e=io.open("/tmp/"..tmp)
if f then
return function()
local l=f:read("*l")
if l then
return l
else
f:close()
os.execute("rm /tmp/"..tmp)
end
end
else
return nil, e
end
end
Ha csak insert/update kell, akkor tökéletes megoldás ez is...
quest_functions-ba ezek kellenek (már ami nem szerepel eddig):
mysql_select
mysql_notselect
mysql_query
io.open
string.gsub
table.insert
read
close
Eredeti post (http://www.elitepvpers.com/forum/metin2-pserver-discussions-questions/1433893-help-lua-sql-2.html#post13342038)
ATAG