Du hast ganz einfach kein local gesetzt. Außerdem hast du SELECT genommen und auch
*, das heißt, alles wird geladen und kann nicht wiedergegeben werden weil kein
specieller wert angegeben ist.
Du hast ganz einfach kein local gesetzt. Außerdem hast du SELECT genommen und auch
*, das heißt, alles wird geladen und kann nicht wiedergegeben werden weil kein
specieller wert angegeben ist.
Mfg
Das mit dem local sollte stimmen.
SELECT * FROM xyz bedeutet, dass alles geladen wird.
Solltest du nur SELECT x,y,z FROM xyz nehmen, können die Werte ebenfalls, wie bei SELECT * geladen werden, nur nicht ausgegeben werden, sofern kein local vorhanden ist (gehe ich mal von aus, habe noch keine Ahnung von der Lua Materie).
If you want to pass the return variables, u have to use ("command") instead of ()
example:
Code:
local f,e=io.popen("mysql -u mt2putty -e 'SELECT * FROM player.magicepoint WHERE id = ".. pc.get_player_id() ..";'")
if f then
res=f:read("*a")
f:close()
end
say_reward(res or "SQL ERROR")
Of corse, u can use f:lines() in a loop if u get more lines:
Code:
for res in f:lines() do
say_reward(res)
wait()
end
f:close()
os.execute returns 0 if no errors, or an error status code, nothing more...
If you want to pass the return variables, u have to use ("command") instead of ()
example:
Code:
local f,e=io.popen("mysql -u mt2putty -e 'SELECT * FROM player.magicepoint WHERE id = ".. pc.get_player_id() ..";'")
if f then
res=f:read("*a")
f:close()
end
say_reward(res or "SQL ERROR")
Of corse, u can use f:lines() in a loop if u get more lines:
Code:
for res in f:lines() do
say_reward(res)
wait()
end
f:close()
os.execute returns 0 if no errors, or an error status code, nothing more...
Can you explain me how i can change some things like socialid, password?
In game it won´t work, because i can't escape the string.
If you want to pass the return variables, u have to use ("command") instead of ()
example:
Code:
local f,e=io.popen("mysql -u mt2putty -e 'SELECT * FROM player.magicepoint WHERE id = ".. pc.get_player_id() ..";'")
if f then
res=f:read("*a")
f:close()
end
say_reward(res or "SQL ERROR")
Of corse, u can use f:lines() in a loop if u get more lines:
Code:
for res in f:lines() do
say_reward(res)
wait()
end
f:close()
os.execute returns 0 if no errors, or an error status code, nothing more...
Ich werde das heute Abend mal ausprobieren, ich interessiere mich dafür total und es scheint mir ziemlich sinnvoll.
Wobei Ich aber sagen muss, dass es ziemlich Overkill mäßig ist, was das selecten im Spiel angeht.
quest sqltest begin state start begin function mysql_query(text) local tmp=number(11111111,99999999) os.execute('mysql -u USERHERE -pPASSWORDHERE -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
when 20016.chat."mysql" begin local sql='SELECT id, account_id FROM player.player WHERE name='..string.format("%q",pc.get_name())..' LIMIT 1;' say("Hello "..pc.get_name().." ") say("Your PID and AID is:") for f,e in sqltest.mysql_query(string.format("%q",sql)) do say(f or e) end say("query was: ") say(sql) say("") end end end
result:
ATAG
This one gives mutch better results, in an indexed table
Code:
--by ATAG
quest sqltest begin
state start begin
function mysql_query(text)
local tmp=number(11111111,99999999)
os.execute('mysql -u root -pPASSWORD -N -e '..string.format("%q",text)..' 2>&1 > /tmp/'..tmp)
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
--[[if table.getn(res)==1 and table.getn(res[1])==1 then --only 1 variable returns
res=res[1][1]
end]]
return res
end
when 20016.chat."test list" begin
local tbl=sqltest.mysql_query("SELECT id, account_id, name from player.player LIMIT 10;")
say("userlist: "..table.getn(tbl))
for i,v in ipairs(tbl) do
say(v[1].." "..v[2].." "..v[3])
end
say("")
end
end
end