-
ezt a parancs sort egy publikált jármûrendszerbõl néztem mert próbálom tanulgatni a MySQL alapjait írom hogy mit nem értek és mit igen // jellel
public OnFilterScriptInit()
{
mysql_debug(1);// ezzel elindítjuk azt hogy kiírja a hibákat egy fájlba
mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS);// ezzel ugye csatlakozunk egy elõre definiált hosthoz
if(mysql_ping() != 1)//lekéri hogy él e a kapcsolat
{
print(!\"MySQL: Kapcsolódás sikertelen!\");
return 1;
}
print(\"\\n--------------------------------------\");
print(\" névreszóló autó | by Ryuuzaki\");
print(\"--------------------------------------\\n\");
for(new i; i < MAX_SLOTS; i++)
{
format(query, sizeof(query), \"SELECT * FROM cars WHERE slot = \'%d\'\", i);//na ez nem tiszta azt hiszem ugye hogy a SELECT az kiválasztja a táblát FROM az oszlop WHERE az pedig azt ahol a sor egyenlõ az i vel
mysql_query(query);//sejtelmem sincs hogy mi
mysql_store_result();//szintén
if(mysql_num_rows() != 0)//szintén
{
new linen[1024];
mysql_fetch_row(linen);//nem tudom
new tarolo[5];
new Float:tarolo2[4];
sscanf(linen, \"p<|>{ds[24]}dffffdddd\", tarolo[0], Float:tarolo2[0], Float:tarolo2[1], Float:tarolo2[2], Float:tarolo2[3], tarolo[1], tarolo[2], tarolo[3], tarolo[4]);//ez teljessen zavaros
carplay = CreateVehicle(tarolo[0], tarolo2[0], tarolo2[1], tarolo2[2], tarolo2[3], tarolo[1], tarolo[2], -1);
AddVehicleComponent(carplay, tarolo[3]);
AddVehicleComponent(carplay, tarolo[4]);
mysql_free_result();//valami felszabadítani a cellákat vagy mi :)
}
}
return 1;
}
Kérek valakit hogy javítsa ki azt amit rosszul tudtam és amit nem tudtam azt mondja meg köszönöm szépen
-
format(query, sizeof(query), \"SELECT * FROM cars WHERE slot = \'%d\'\", i);
Kiválasztjuk a sort, a cars táblából onnan ahol a slot egyenlõ az i értékével.
mysql_query(query);
Futtatja a lekérdezést. ( Feljebb formáztuk )
mysql_store_result();
Az eredményt(lekérdezés) megtartja. (Ezáltal meg marad a lekérdezett infó)
(mysql_num_rows() != 0)
Hogyha van ilyen sor..
mysql_fetch_row(linen);
Illessz be a mezõk választásaként \'|\' deliméter(eket).
sscanf(linen, \"......
A változóknak értéket ad az sscanf szétválasztóval.
mysql_free_result();
Felszabadítja a memó.-t.
-
public OnFilterScriptInit()
{
mysql_debug(1);// ezzel elindítjuk azt hogy kiírja a hibákat egy fájlba
mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS);// ezzel ugye csatlakozunk egy elõre definiált hosthoz (nem csak hosthoz hanem egy számodra létrehozott adattömbhöz is mint felhasználónév és adatbázisnév (SQL_USER, SQL_DB)
if(mysql_ping() != 1)//lekéri hogy él e a kapcsolat
{
print(!\"MySQL: Kapcsolódás sikertelen!\");
return 1;
}
print(\"\\n--------------------------------------\");
print(\" névreszóló autó | by Ryuuzaki\");
print(\"--------------------------------------\\n\");
for(new i; i < MAX_SLOTS; i++)
{
format(query, sizeof(query), \"SELECT * FROM cars WHERE slot = \'%d\'\", i); // Az összes adatoszlop kiválasztása (SELECT *) a cars adattáblán (FROM cars) aminek a slot adatoszlop bármelyik mezõjének értéke = i -vel (WHERE slot = \'%d, i)\'
mysql_query(query);// tekintheted belépési pontnak is mysql adattároláshoz (elküldi a mysqql szerverhez mit is akarsz tõle) :D
mysql_store_result();// a mysql szervertõl kapott adatok tárolása további felhasználásra
if(mysql_num_rows() != 0)// ellenõrzi hogy mennyi adatsort kaptunk vissza eredményként (pontosabban itt kaptunk-e vissza adatot)
{
new linen[1024];
mysql_fetch_row(linen);//a visszakapott adatsorunkat tárolja számunkra a létrehozott \"linen\" változóban (hogy feltudjuk használni pawnban) az elõre meghatározott | delimiterrel pl.: 3|infernus|0|2.3212312|4.321231|4.323231|..
new tarolo[5];
new Float:tarolo2[4];
sscanf(linen, \"p<|>{ds[24]}dffffdddd\", tarolo[0], Float:tarolo2[0], Float:tarolo2[1], Float:tarolo2[2], Float:tarolo2[3], tarolo[1], tarolo[2], tarolo[3], tarolo[4]);//szét darabolja a linen változóba tett adatsorunkat (ami nem más csak számok nevek egymástól | karakterrel elválasztva)
carplay = CreateVehicle(tarolo[0], tarolo2[0], tarolo2[1], tarolo2[2], tarolo2[3], tarolo[1], tarolo[2], -1);
AddVehicleComponent(carplay, tarolo[3]);
AddVehicleComponent(carplay, tarolo[4]);
mysql_free_result();// a mysql_store_result által tárolt adatok felszabadítása
}
}
return 1;
}
Amúgy ez egy eléggé elcseszett kód.
Egy for ciklus ami lehet lefut kétezerszer és kétezer alkalommal kér le adatot mysql-rõl. Itt a fórum is egy oldal betöltésnél is alig ~30 körüli lekérdezést hajt végre nem 2000-et. :D
-
:D köszönöm kezdem érteni de még ez nem tuti hogy ebben a sorba
sscanf(linen, \"p<|>{ds[24]}dffffdddd\", tarolo[0], Float:tarolo2[0], Float:tarolo2[1], Float:tarolo2[2], Float:tarolo2[3], tarolo[1], tarolo[2], tarolo[3], tarolo[4]);
a pirossal jelölt résznek mi a jelentése
-
A \"p<|>\" rész a | karakternél való elválasztást, a \"d\" egy egész számot, az \"s[24]\" pedig egy 24 hosszúságú karaktert jelöl.
-
és miért van {} ilyen karakter benne?
-
Mert azt figyelmen kívül hagyja. Ha megtalálja benne azokat a részeket.
Ha nem lenne ott akkor be kellene illesztened még kettõ változót:
sscanf(linen, \"p<|>ds[24]dffffdddd\",int, string, tarolo[0], Float:tarolo2[0], Float:tarolo2[1], Float:tarolo2[2], Float:tarolo2[3], tarolo[1], tarolo[2], tarolo[3], tarolo[4]);[/quote]
-
és ha alapból nem raknánk bele semmit?
sscanf(linen, \"p<|>dffffdddd\", tarolo[0], Float:tarolo2[0], Float:tarolo2[1], Float:tarolo2[2], Float:tarolo2[3], tarolo[1], tarolo[2], tarolo[3], tarolo[4]);
-
és ha alapból nem raknánk bele semmit?
sscanf(linen, \"p<|>dffffdddd\", tarolo[0], Float:tarolo2[0], Float:tarolo2[1], Float:tarolo2[2], Float:tarolo2[3], tarolo[1], tarolo[2], tarolo[3], tarolo[4]);
Akkor elcsúsznának az adatok. (mindegyik 2-vel elõrébb)
-
tehát kell 2 üres adat tárolót beilleszteni scanf be hogy rendben legyenek a dolgok? :D de akkor mind1 hogy mik ezek ? tehát i,d,s[20] bármeik?
-
tehát kell 2 üres adat tárolót beilleszteni scanf be hogy rendben legyenek a dolgok? :D de akkor mind1 hogy mik ezek ? tehát i,d,s[20] bármeik?
nem kell tároló neki... mivel nem csinálsz vele semmit... ezért is van kapcsos zárójelben hogy azt hagyja ki.
azok meg változó típusok.
-
Ez a kód után illessz be egy print sort:
new linen[1024];
mysql_fetch_row(linen);//nem tudom
print(line);
new tarolo[5];
[/quote]
Majd indítsd el a samp szervert és keresd meg amit kiírt a server_log.txt fájlba majd akkor azt tanulmányozd és talán megérted minek kell oda.
De el is lehet kerülni ha te mysql lekérésnél meghatározod melyik adatoszlopok adatival térjen vissza, csillag helyett beírod azokat amelyekre neked szükséged van.
SELECT `x`,`y`,`z`
-
Köszönöm szépen a válaszokat, zárom a témát és mindenkit felpontozok!