Quest MYSQL-Abfrage fail?

06/13/2013 14:49 xGr33n#1
Hallu,
ich habe eine Pet-Quest mit MYSQL-Abfrage, diese habe ich auf meinen alten Serverfiles ohne Probleme benutzen können, ich habe dort auch die selbe Schnittstelle benutzt. Bei meinen neuen Files, klappt das mit der MYSQL-Erweiterung nicht mehr, es kann daran liegen, dass das MYSQL Kennwort ein !@# hat, per hand kann ich mich so auch nicht einloggen.... Ich habe deshalb in der Erweiterung schon:

PHP Code:
os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi) -- für MySQL51 
zu

PHP Code:
os.execute("mysql -u mt2pet --password='test' --e='"..string.format('%q',query).."' > "..fi) -- für MySQL51 
geändert und so lasse ich den Server ja über einen anderen User, als in den Configs bestimmt connecten. Dennoch geht die Abfrage noch immer nicht. Syserr bleibt leer....

Weiß jmd. wie ich das beheben kann?

Vielen Dank!

Quest:

PS: Ich habe es per
PHP Code:
local pet_name os.execute("mysql -u mt2pet --password='test' --e='SELECT name FROM player.pet_name WHERE id = '"..pc.get_player_id().."';'"
Auch schon getestet
06/13/2013 16:06 SinSay#2
Haben die Mysql benutzer die richtigen rechte zum verändern &erstellen ?
06/13/2013 16:07 xGr33n#3
Ja, alle rechte... Die quest nennen wir es "bricht" bei der mysql-abfrage auch ab...
06/13/2013 16:10 SinSay#4
okey... naja ich kenne mich damit nicht so gut aus... aber wieso willst du das mit einer DB abfrage machen?
06/13/2013 16:12 xGr33n#5
Um die Haustiernamen zu speichern & wd auszulesen oder gibt es auch eine andere Möglichkeit?
06/13/2013 16:20 Mijago#6
Sicher dass du MySQL 5.1 und nicht 5.5 hast? Die Funktion bietet beides, jedoch ist 5.5 standardmäßig auskommentiert (Steht ja extra in der Zeile dabei).

Standardmäßig sieht die MySQL-Funktion so aus: ([Only registered and activated users can see links. Click Here To Register...])
Code:
mysql_query = function(query)
    if not pre then
        local rt = io.open('CONFIG','r'):read('*all')
        pre,_= string.gsub(rt,'.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+)%s(%S+).+','-h%1 -u%2 -p%3 -D%4')
    end
    math.randomseed(os.time())
    local fi,t,out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{}
    os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi) -- für MySQL51
    -- os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) -- für MySQL55
    for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'\t')) end; os.remove(fi);
    for i = 2, table.getn(t) do table.foreach(t[i],function(a,b)
        out[i-1]               = out[i-1] or {}
        out[i-1][a]            = tonumber(b) or b or 'NULL'
        out[t[1][a]]           = out[t[1][a]] or {}
        out[t[1][a]][i-1]      = tonumber(b) or b or 'NULL'
    end) end
    return out
end
Möchtest du sie mit 5.5 nutzen, so musst du die Kommentare austauschen:
Code:
mysql_query = function(query)
    if not pre then
        local rt = io.open('CONFIG','r'):read('*all')
        pre,_= string.gsub(rt,'.+PLAYER_SQL:%s(%S+)%s(%S+)%s(%S+)%s(%S+).+','-h%1 -u%2 -p%3 -D%4')
    end
    math.randomseed(os.time())
    local fi,t,out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{}
    -- os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi) -- für MySQL51
    os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) -- für MySQL55
    for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'\t')) end; os.remove(fi);
    for i = 2, table.getn(t) do table.foreach(t[i],function(a,b)
        out[i-1]               = out[i-1] or {}
        out[i-1][a]            = tonumber(b) or b or 'NULL'
        out[t[1][a]]           = out[t[1][a]] or {}
        out[t[1][a]][i-1]      = tonumber(b) or b or 'NULL'
    end) end
    return out
end
Nur ein kleiner Lösungsansatz c:


Dann noch eine kleine Anpassung für dich:
Code:
mysql_query = function(query)
    local user = 'a';
    local pass = 'b';

    local pre = ' -u'..user.. '-p'..pass
    math.randomseed(os.time())
    local fi,t,out = 'mysql_data_'..math.random(10^9)+math.random(2^4,2^10),{},{}
    os.execute('mysql '..pre..' --e='..string.format('%q',query)..' > '..fi) -- für MySQL51
    -- os.execute('mysql '..pre..' -e'..string.format('%q',query)..' > '..fi) -- für MySQL55
    for av in io.open(fi,'r'):lines() do table.insert(t,split(av,'\t')) end; os.remove(fi);
    for i = 2, table.getn(t) do table.foreach(t[i],function(a,b)
        out[i-1]               = out[i-1] or {}
        out[i-1][a]            = tonumber(b) or b or 'NULL'
        out[t[1][a]]           = out[t[1][a]] or {}
        out[t[1][a]][i-1]      = tonumber(b) or b or 'NULL'
    end) end
    return out
end
Weiterhin MySQL-Version beachten; Tippe bei dir lediglich auf eine Fehlkonfiguration :)
Die Änderung solltest du eigl nicht brauchen, denn er nimmt ja 1:1 den MySQL-User des Cores, das heißt, er hat die selben Rechte.
06/14/2013 08:00 xGr33n#7
Der Meister selber *-*
Danke erstmal für deine Antwort, an das MYSQL 5.5 hatte ich auch schon gedacht und getestet hat leider nicht funktioniert...
Deine zweite Lösung habe ich gerade getestet, natürlich habe ich den MYSQL-User eingetragen, funktioniert leider auch nicht. :( Wenn ich die Querrys per Hand in Vbox eingebe:

mysql -u mt2pet --password='test' --e='SELECT * FROM player.pet_name WHERE id = '12345';

funktioniert es. Ich bin am verzweifeln :(

mfg
06/14/2013 10:06 Mijago#8
Ich seh's mir heute Abend eventuell mal an, ich schicke dir eine PN mit meiner Skype-ID, dann kannst du mich hinzufügen. Ich werde die dann die Tage mal unter die Arme greifen.