Szerző Téma: sql talált sorok probléma  (Megtekintve 1535 alkalommal)

Nem elérhető inf

  • 366
    • Profil megtekintése
sql talált sorok probléma
« Dátum: 2017. November 06. - 21:59:04 »
0
Üdv.
 
MTA-ba ha insertelek valamit a dbQuery-vel utána miért ad minden SELECT-re 1 sort?
 
Tehát van egy regisztrációs rendszer amibe ha regisztrál valaki lefut pl ez:
 

INSERT INTO users (username,password) VALUES (\'valami\',\'valami123\')

 
Ezután az INSERT után egy SELECT nem működik normálisan.
 
Tehát ha megakarom nézni, hogy van-e ilyen játékos az adatbázisba akkor 1 sort ad vissza mindig.
 

SELECT 0 FROM users WHERE username=\'ilyenugysincs\' AND password=\'ilyenjelszosincs\'

 
Itt vissza kellene adni 0 sort mert ilyen felhasználó-jelszó páros nincs az adatbázisba de valamiért mégis 1 sort ad vissza.
 
És az az érdekes mielőtt még nem fut le az INSERT addig tökéletesen működik a SELECT is és annyi sort ad vissza amennyit talál.
 
Próbáltam közvetlen az adatbázisba lefuttatni az sql-t ott tökéletesen működik.
 
A talált sorokat így kérem le:
 

adatok, sorok, last_insert_id = dbPoll(dbQuery(db_kapcs, \"SELECT 0 FROM users WHERE username=\'\"..uname..\"\' AND password=\'\"..pw..\"\'\"), -1)
if sorok == 0 then
nincs ilyen felhasználó
else
van ilyen felhasználó
end

 
Mi lehet a probléma?
 
Válaszokat előre is köszönöm!
« Utoljára szerkesztve: 2017. November 07. - 00:17:51 írta InFIeL_HuN »

sql talált sorok probléma
« Válasz #1 Dátum: 2017. November 06. - 22:25:27 »
+4
Szia.
Elsőként is javaslom az alábbi sql select használatát:
 
 

function functionname()
    dbQuery(function(query)
    local query, query_lines = dbPoll(query, 0)
        if query_lines > 0 then        
            for k, v in pairs(query) do
                -- ide jöhet minden
            end
        else
            -- üres a tábla, itt történjen valami, pl beszúrja neki az adatot vagy amit szeretnél.
        end
    end, connection, \"SELECT * FROM tablaneve\")
end

 
Másik fele, hogy amennyiben nem szükséges vagyis nem akarsz választ kapni a történetben, akkor javaslom az alábbi függvény használatát:dbExecA kérdésedre pedig:
 
 
Selectálás során a teljes táblából kell selectálni (SELECT * FROM ... etc) és utána kell megadnod az argumentet hogy mi alapján. Ahogy nézem alapból maga a felépítés sem stimmel nálad (legalábbis én soha nem láttam még így felépítve egy scriptet sem).
Inserthez:
 

dbExec(sqlkapcsolat, \"INSERT INTO table_neve SET username = ?, password = ?\", username, password )

 
Selecthez:
 
 

function functionname()
    dbQuery(function(query)
    local query, query_lines = dbPoll(query, 0)
        if query_lines > 0 then        
            for k, v in pairs(query) do
                if v[\"username\"] == username and v[\"password\"] == password then
            -- van találat
         else
            -- nincs találat
         end
            end
        else
            -- üres a tábla, itt történjen valami, pl beszúrja neki az adatot vagy amit szeretnél.
        end
    end, connection, \"SELECT * FROM tablaneve\")
end

 
Ha minden igaz itt stimmelni fog a dolog. Ami fontos, hogy ne jelents el titkosítani sem, illetve valami kulcsot sem árt hozzáadni.  Remélem tudtam segíteni.

Nem elérhető inf

  • 366
    • Profil megtekintése
sql talált sorok probléma
« Válasz #2 Dátum: 2017. November 07. - 15:23:22 »
0
És, hogy ha most csak egy konkrét felhasználóra szeretnék rákeresni akkor is a \"SELECT * FROM tablanev\"-et kellene használnom?
 
Mert ez most mindent kijelöl a táblába az összes felhasználót.
 
Ha \"SELECT * FROM tablenev WHERE username=felhasznalo123\"-at használnám akkor csak azt a felhasználót jelölné ki akivel éppen dolga van.
 
Valami ilyesmire gondolok amit leírtál alapján
 

dbQuery(function(query)
local query, query_lines = dbPoll(query, 0)
    if query_lines > 0 then
   -- van találat
else
   -- nincs találat
end
end, connection, \"SELECT * FROM tablaneve WHERE username=\'felhasznalo123\'\")

 
Ennek működnie kellene elvileg nem?

sql talált sorok probléma
« Válasz #3 Dátum: 2017. November 07. - 16:47:17 »
+1

dbQuery(function(query)
local query, query_lines = dbPoll(query, 0)
    if query_lines > 0 then
   -- van találat
else
   -- nincs találat
end
end, connection, \"SELECT * FROM tablaneve WHERE username= ?\", felhasznalo123)

 
Ezt kell akkor. WHERE -> ahol username = ? -> felhasználónév ezt lezárod és megadod hogy milyen username az amit keresel tehát jelen esetben felhasznalo123
De amúgy ez a szelektálás fajta azért is jobb, mert egyszer fut le, majd megáll, ellenben a -1-s értékkel, ami folyamatosan újra és újra fog futni, ameddig nem talál értéket.
 



   
       Use 0 for an instant response (which may return nil). Use -1 to wait until a result is ready.
   

[/quote]
 
Ha elolvasod a wiki-t amúgy és nem csak \"kimásolod\" a szükséges dolgokat, akkor ezekről mind tájékoztatást kapsz mellesleg (ha nem tudsz angolul bemásolod google translateba és azzal is megfogod tudni érteni a dolgokat úgy ahogy). 
« Utoljára szerkesztve: 2017. November 07. - 16:50:54 írta AlexSwamp »

Nem elérhető inf

  • 366
    • Profil megtekintése
sql talált sorok probléma
« Válasz #4 Dátum: 2017. November 07. - 18:44:15 »
0
Még mindig nem jó valami sajnos.
 
Miután ez lefut
 

dbExec(db_connection, \"INSERT INTO users (username,password,serial,ip) VALUES (?,?,?,?)\", uname, hash(\"md5\", pw), getPlayerSerial(source), getPlayerIP(source))

 
a dbPollokban a query_lines változó mindig csak 1-et ad vissza, még akkor is ha nem talál 1 sort se.
« Utoljára szerkesztve: 2017. November 07. - 20:58:49 írta InFIeL_HuN »

sql talált sorok probléma
« Válasz #5 Dátum: 2017. November 07. - 20:52:51 »
+1
Idézetet írta: InFIeL_HuN date=1510076655


   
      Még mindig nem jó valami sajnos.
   
   
      Miután ez lefut
   
   

dbExec(db_connection, \"INSERT INTO users (username,password,serial,ip) VALUES (?,?,?,?)\", uname, hash(\"md5\", pw), getPlayerSerial(source), getPlayerIP(source))

   
      a dbPollokban a query_lines változó mindig csak 1-et ad vissza, még akkor is ha nem talál 1 sort se.
   


Hát miután rosszul akarod hozzáadni. Úgy nézz ki nem érted meg, hogy rosszul akarod az argumenteket feltölteni. dbExec a következő képen kell kinézzen:
 
 

dbExec(db_connection, \"INSERT INTO users SET username=?, password=?, serial=? , ip=? \", uname, hash(\"md5\", pw), getPlayerSerial(source), getPlayerIP(source))

 
Nézd meg utána, hogy SQL-be bemegy -e az érték.

Nem elérhető inf

  • 366
    • Profil megtekintése
sql talált sorok probléma
« Válasz #6 Dátum: 2017. November 07. - 20:56:53 »
+1
INSERT INTO users \"SET\" nem jó sqlite-ba csak mysql-ba.
 
Legalábbis debugscript hibát ad vissza rá. (dbExec failed; near \"SET\": syntax error)
 
De már megoldottam valahogy. Köszi a segítséged! :D
« Utoljára szerkesztve: 2017. November 07. - 20:58:58 írta InFIeL_HuN »

sql talált sorok probléma
« Válasz #7 Dátum: 2017. November 07. - 21:00:44 »
0
Idézetet írta: InFIeL_HuN date=1510084613


   
      INSERT INTO users \"SET\" nem jó sqlite-ba csak mysql-ba.
   
   
      Legalábbis debugscript hibát ad vissza rá. (dbExec failed; near \"SET\": syntax error)
   
   
      De már megoldottam valahogy. Köszi a segítséged! :D
   


Ja hogy nem mysql-t használsz. Akkor már értem. :D Örülök, hogy tudtam valamennyit segíteni. :) Mellesleg miért sqlite-t használsz? :D 

Nem elérhető inf

  • 366
    • Profil megtekintése
sql talált sorok probléma
« Válasz #8 Dátum: 2017. November 07. - 21:04:49 »
0
Igen azt elfelejtettem mondani mit használok, bocsi. :D
 
Azt mondták, hogy ha nem szeretném weboldallal összekötni a szervert akkor az sqlite is megfelelő adatok eltárolására.

sql talált sorok probléma
« Válasz #9 Dátum: 2017. November 07. - 21:22:50 »
0
Hát lehetséges, én nem használtam még.  
Én szeretem a phpmyadminos vonalat, bár lehet majd kifogok próbálni mást is egyszer. 

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal