MySQL_tquery vraca 0 kao rezultat


Započeo ShomyTKD, Januar 20, 2018, 00:08:12 PRE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Detaljan opis problema: Pozdrav svima. Skinuo sam Dynamic Vehicle Ownership skriptu; http://balkan-samp.com/forum/index.php?topic=25812.0 i prebacio je u moj gamemode. Obrisao sam sve nepotrebno i skripta radi kako treba. Takodje sam napravio tabelu u bazi i sve bi trebalo valjati. Kada spawnujem vozilo, kupim i izadjem sa servera, proverim u Databazi i sve je lepo sacuvano. Tu su koordinate vozila i sve ostalo. Medjutim, kada opet pokrenem server deo gde program treba Loadovati skriptu ne radi. Debug sam deo koji loaduje i mysql_tquery mi vraca 0, takodje 0 za rows i fields, a kada u phpMyAdmin rucno unesem SELECT * FROM `privateveh` WHERE `vID` < 50 on vraca dva reda, kao sto i treba.
Dio skripte: Evo cele te funkcije: https://pastebin.com/6mnb09T1  Znaci neki je problem u mysql_tquery.. Ali zanimljivo je to sto mi radi u delu gde cuva vozila, a koristi se isti mysql_tquery.. Probao sam da debug sve zivo, cak mi na "SELECT 1" on vraca 0. Ako neko zna da mi pomogne bio bih mu zahvalan jer evo vec 2 dana mucim glavu  ??? Verzija MySQL koju koristim je R40.
Neke slike/video za lakse dobivanje pomoci(neobavezno):
Nisam pro, samo pokušavam da pomognem :)




Probaj koristiti mysql_query umjesto tquery, jer (t)hread radi asinkrono sto ce ti naravno prikazati 0 ako zatražiš rezultat iste milisekunde, pozovi callback ili radi sinkroni query

Iskoristi sve parametre, tquery koristi kada insertas u bazu tada ti ne treba callback a kada citas iz baze ako oces asinkrono onda iskoristi sve parametre

(MySQL:handle, const query[], const callback[] = "", const format[] = "", {Float,_}:...)
Poslednja Izmena: Januar 20, 2018, 00:34:44 PRE PODNE od Ino42O
Software Developer

mysql_query(Database, "SELECT * FROM `privateveh` WHERE `vID` < 50 ORDER BY vID");


Ovo nije pomoglo, jos uvek ne ocitava ni jedno vozilo iz baze. A nisam te skapirao za callback? Kako to da pozovem? Mozes li da pojasnis parametre u tvom kodu?

Sry prilicno sam nov u Pawn, prvi put da radim gamemode, jos ga radim od nule..
Poslednja Izmena: Januar 20, 2018, 01:32:18 PRE PODNE od ShomyTKD
Nisam pro, samo pokušavam da pomognem :)




Citat: ShomyTKD poslato Januar 20, 2018, 01:31:15 PRE PODNE
mysql_query(Database, "SELECT * FROM `privateveh` WHERE `vID` < 50 ORDER BY vID");


Ovo nije pomoglo, jos uvek ne ocitava ni jedno vozilo iz baze. A nisam te skapirao za callback? Kako to da pozovem? Mozes li da pojasnis parametre u tvom kodu?

Sry prilicno sam nov u Pawn, prvi put da radim gamemode, jos ga radim od nule..

https://github.com/pBlueG/SA-MP-MySQL/blob/master/example_scripts/login_system-cache.pwn
Software Developer

Jel meni treba deo kod OnPlayerConnect() ?
new query[103];
mysql_format(g_SQL, query, sizeof query, "SELECT * FROM `players` WHERE `username` = '%e' LIMIT 1", Player[playerid][Name]);
mysql_tquery(g_SQL, query, "OnPlayerDataLoaded", "dd", playerid, g_MysqlRaceCheck[playerid]);


Nisam pro, samo pokušavam da pomognem :)





Citat: ShomyTKD poslato Januar 20, 2018, 01:57:42 PRE PODNE
Jel meni treba deo kod OnPlayerConnect() ?
new query[103];
mysql_format(g_SQL, query, sizeof query, "SELECT * FROM `players` WHERE `username` = '%e' LIMIT 1", Player[playerid][Name]);
mysql_tquery(g_SQL, query, "OnPlayerDataLoaded", "dd", playerid, g_MysqlRaceCheck[playerid]);




Nemoj samo kopirati, to sto sam ti poslao je primjer samo, ne treba ti varijabla mysqlRaceCheck, radi sa razumijevanjem a ne samo copy paste napamet

Ako ne znas sto je to thread, ovdje mozes pronaci objasnjenje
https://en.m.wikipedia.org/wiki/Thread_(computing)
Poslednja Izmena: Januar 20, 2018, 10:11:39 PRE PODNE od Ino42O
Software Developer

Nisam te bas najbolje shvatio, ali evo, nekog napretka ima. Evo sta sam uradio. Prvo sam onaj stock promenio u public, sada izgleda ovako:

https://pastebin.com/fNecJz3u

Na vrh fajla sam dodao forward public LoadPVehicles();

I u OnGameModeInit() sam dodao sledece:

new Query[1024];
mysql_format(Database, Query, sizeof(Query), "SELECT * FROM `privateveh` WHERE `vID` < 2 ORDER BY vID");
mysql_tquery(Database, Query, "LoadPVehicles");


E sad, kada pokrenem server, pocne da se spamuje nesto i nikako da stane, kao da je zaglavljen u while loop. Evo kako izgleda server.log:
https://pastebin.com/FR6WyZCB I bukvalno samo spamuje ove poslednje linije u fajlu. While loop mi je sumnjiv, ali ne znam sta je problem..
@Ino42O
Poslednja Izmena: Januar 20, 2018, 16:42:47 POSLE PODNE od ShomyTKD
Nisam pro, samo pokušavam da pomognem :)




Zato jer ovo nije python, koristi ovako

while (condition) {
   // Kod ovdje
}

Znaci nisi otvorio block koda za while petlju {}
Software Developer

Sredio sam sve to nekako. Sad imam problem sa setovanjem vlasnika vozila u bazi. Kako da dodjem do ID igraca u bazi i da ga povezem sa vozilom, tako da se zna kome pripada vozilo? Treba li u bazi da se pravi strani kljuc (foreign key)?

U skripti lik koristi mysql_real_escape_string ali toga nema u R40 MySQL.
Poslednja Izmena: Januar 20, 2018, 18:35:58 POSLE PODNE od ShomyTKD
Nisam pro, samo pokušavam da pomognem :)




Napravis kolonu owner_id u tablici vozila, i to neka ti bude referenca na igracev id iz tablice igraca, posle povezes te informacije i mozes dobiti ime igraca i sve ostalo
Software Developer

Ma idi.. Ovo me zajebava nemas pojma.. Taman popravim jednu stvar, drugi error se pojavi.. Napravicu ispocetka, a ne ovako da editujem skriptu pa sta bude. Hvala u svakom slucaju!
Nisam pro, samo pokušavam da pomognem :)