Szerző Téma: MTA Mysql. Ez miért nem jó?  (Megtekintve 1420 alkalommal)

Nem elérhető Tarack

  • 177
    • Profil megtekintése
MTA Mysql. Ez miért nem jó?
« Dátum: 2017. Január 10. - 21:40:11 »
0 Show voters
Sziasztok lenne egy ilyen scriptem.
 
Ennek az lenne a lényege ha megtalálja az olyan játékost akinek a serial és az sqlben mentett serial (az sql-ben LE VAN MENTVE A SERIALOM IS!) egyezik akkor kiírja hogy sikeres és annak a játékosnak az acc id-jét akivel  a serial egyezik. (Szintén sql-be mentve van!)
 

local newsql  = trigger,etcc.. (a rendes scriptben ez működik itt! nem ez van ideírva!)
    function loginCallback(mtaserial) -- az mta serial külső forrásból van ide behozva amit át is hoz ide,outputchatbox-al megnéztem --

    local kecskeROW = dbQuery(newsql,\"SELECT * FROM account WHERE mtaserial = ? \",mtaserial)
local res,rows,err = dbPoll(kecskeROW,0)

    if rows > 0 then -- itt errorodzik ERROR: attemp to index local ROWS !
outputChatBox(\"Sikeres. A te acc id-d: \"..rows[\"accID\"])
   
    end
    end
   
« Utoljára szerkesztve: 2017. Január 10. - 21:52:48 írta Tarack »

MTA Mysql. Ez miért nem jó?
« Válasz #1 Dátum: 2017. Január 12. - 13:05:39 »
0 Show voters
Nem értem, hogy most akkor a loginCallback function az egy sql callback vagy nem. Mert ha az tényleg callback akkor elsőnek poll-olni kell az mtaserial változód.
De ha ahogy írtad és outputchatbox-al kiírja rendesen a serialod akkor jó csak furán van elnevezve.
 
A gond ott kell, hogy legyen hogy ebben a sorban:
 
 

local kecskeROW = dbQuery(newsql,\"SELECT * FROM account WHERE mtaserial = ? \",mtaserial)

 
Küldesz egy sql lekérdezést, majd a következőben:
 

local res,rows,err = dbPoll(kecskeROW,0)

 
Egyből megnézed az eredményt. (A 0 azt jelenti hogy mennyi időt várjon az eredményre) Azonnal nyilván nem fogja vissza az eredményt a MySQL szervered. Így vagy mondasz neki egy hosszabb időt (mondjuk 500 ms) vagy vársz örökké. De ezek nem jó megoldások mert addig fogják a scriptet nem haladhat tovább.
 
Itt egy példa (3.), hogy hogy kell callbacket használni
 

function aaa()
    dbQuery( myCallback, connection, \"SELECT * FROM table_name\" )
end
function myCallback(qh)
    local result = dbPoll( qh, 0 )   -- Timeout doesn\'t matter here because the result will always be ready
end

 
 
 
A callbackek csak annyik, hogy elküldöd az SQL lekérést majd fut tovább a scripted nem áll meg és amikor kész az eredmény (kész eredmény timedout is lehet) akkor meghívja a myCallback funkciódat. (qh a queryhandler abba van az eredmény vagy hiba)

MTA Mysql. Ez miért nem jó?
« Válasz #2 Dátum: 2017. Január 16. - 09:48:55 »
0 Show voters
Azért errorozik mert a row után nincs megadva a tábla név. Tehát pl row[\"tablaneve\"].
 
 

MTA Mysql. Ez miért nem jó?
« Válasz #3 Dátum: 2017. Január 16. - 12:26:50 »
+1 Show voters
Idézetet írta: AlexSwamp date=1484556535


   
      Azért errorozik mert a row után nincs megadva a tábla név. Tehát pl row[\"tablaneve\"].
   
       
   


Ja tényleg az is rossz, köszönöm :D De ő szerintem azt akarja megnézni hogy legalább egy eredményt kapott e vissza tehát #rows > 0.
 
De attól szerintem amit írtam az a hiba első sorban. Mert ha az egy tábla lenne (nem nil) akkor azt írná ki hogy nem tudom végre hajtani ezt az operátort egy táblán.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal