Jump to content

Ajutor


AndreiB

Recommended Posts

Salutare cine ma poate ajuta si pe mine sa imi zica cum schimb o versiune de mysql

Lucrez pe saints si are versiunea de mysql r34 si vreau sa il trec pe versiunea de mysql r41-4

Si nu stiu cum trebuie sa pub la pubicul onplayerlogin.

mysql_fetch_field_row(result,"password"); format(PlayerInfo[playerid][pKey], 128, result);
            mysql_fetch_field_row(result,"Level"); PlayerInfo[playerid][pLevel] = strval( result );
            mysql_fetch_field_row(result,"Admin"); PlayerInfo[playerid][pAdmin] = strval( result );
            mysql_fetch_field_row(result,"Helper"); PlayerInfo[playerid][pHelper] = strval( result );

asa este originalul si vreau sa il trec pe r41-4 cine ma ajuta are +1

Link to comment
Share on other sites

Asta e simplu tot ce trebuie sa faci este sa te uiti aici: http://wiki.sa-mp.com/wiki/MySQL si cauti functiile cu cache_get_value_name si vezi care ecum corespunde

Dar ca sa te ajut iti zic direct

//Asta este un string deci vei folosi cache_get_value_name
mysql_fetch_field_row(result,"password"); format(PlayerInfo[playerid][pKey], 128, result);

Cache_get_value_name(0, "password", PlayerInfo[playerid][pKey], 128);
//Astea sunt integer deci vei folosi cache_get_value_name_int
mysql_fetch_field_row(result,"Level"); PlayerInfo[playerid][pLevel] = strval( result );
mysql_fetch_field_row(result,"Admin"); PlayerInfo[playerid][pAdmin] = strval( result );
mysql_fetch_field_row(result,"Helper"); PlayerInfo[playerid][pHelper] = strval( result );

cache_get_value_name_int(0, "Level", PlayerInfo[playerid][pLevel]);
cache_get_value_name_int(0, "Admin", PlayerInfo[playerid][pAdmin]);
cache_get_value_name_int(0, "Helper", PlayerInfo[playerid][pHelper]);

Iiti recomand sa te uiti peste acel link si sa vezi functiile

Pentru float vei folosi cache_get_value_name_float

  • Upvote 1
Link to comment
Share on other sites

52 minutes ago, Banditul said:

Asta e simplu tot ce trebuie sa faci este sa te uiti aici: http://wiki.sa-mp.com/wiki/MySQL si cauti functiile cu cache_get_value_name si vezi care ecum corespunde

Dar ca sa te ajut iti zic direct


//Asta este un string deci vei folosi cache_get_value_name
mysql_fetch_field_row(result,"password"); format(PlayerInfo[playerid][pKey], 128, result);

Cache_get_value_name(0, "password", PlayerInfo[playerid][pKey], 128);

//Astea sunt integer deci vei folosi cache_get_value_name_int
mysql_fetch_field_row(result,"Level"); PlayerInfo[playerid][pLevel] = strval( result );
mysql_fetch_field_row(result,"Admin"); PlayerInfo[playerid][pAdmin] = strval( result );
mysql_fetch_field_row(result,"Helper"); PlayerInfo[playerid][pHelper] = strval( result );

cache_get_value_name_int(0, "Level", PlayerInfo[playerid][pLevel]);
cache_get_value_name_int(0, "Admin", PlayerInfo[playerid][pAdmin]);
cache_get_value_name_int(0, "Helper", PlayerInfo[playerid][pHelper]);

Iiti recomand sa te uiti peste acel link si sa vezi functiile

Pentru float vei folosi cache_get_value_name_float

atata tot ca uite cum ii

mysql_fetch_field_row(result,"MarriedTo"); strmid(PlayerInfo[playerid][pMarriedTo], result, 0, strlen(result), 255);

si cu asta cum fac

Capture.PNG

Edited by AndreiB
Link to comment
Share on other sites

Daca te astepti sa iti fac eu toate alea nu se va intampla, o sa iti dau un exemplu dar tu va trebui sa il continui pentru ca nu vei invata niciodata daca dai copy-paste

public OnPlayerLogin(playerid,password[])
{
    new playername2[MAX_PLAYER_NAME];
    GetPlayerName(playerid, playername2, sizeof(playername2));
    new qstr[100];
    new result[456];

    mysql_formatformat(SQL, qstr,100,"SELECT * FROM users WHERE `name`='%s' AND `password`='%s'",playername2,password);
    new Cache: cache = mysql_query(SQL,qstr);

    if(cache_num_rows())
    {
      	cache_get_value_name(0, "password", PlayerInfo[playerid][pKey], 128);
        cache_get_value_name_int(0, "Level", PlayerInfo[playerid][pLevel]);
        cache_get_value_name_float(0, "pHealth", PlayerInfo[playerid][pHealth]);
        //Aici convertesti restu lucrurilor

        //Astea trebuie sterse, dar ti-am lasat exemplu de vechea functie vs noua functie(deasupra)
        mysql_fetch_field_row(result,"password"); format(PlayerInfo[playerid][pKey], 128, result);
        mysql_fetch_field_row(result,"Level"); PlayerInfo[playerid][pLevel] = strval( result );
        mysql_fetch_field_row(result,"pHealth"); PlayerInfo[playerid][pHealth] = floatstr( result );
    }
    cache_delete(cache);
}

Edit: Si foloseste acel wiki sa vezi cum e si ce face fiecare functie

Edited by Banditul
  • Upvote 1
Link to comment
Share on other sites

8 minutes ago, Banditul said:

Daca te astepti sa iti fac eu toate alea nu se va intampla, o sa iti dau un exemplu dar tu va trebui sa il continui pentru ca nu vei invata niciodata daca dai copy-paste


public OnPlayerLogin(playerid,password[])
{
    new playername2[MAX_PLAYER_NAME];
    GetPlayerName(playerid, playername2, sizeof(playername2));
    new qstr[100];
    new result[456];

    mysql_formatformat(SQL, qstr,100,"SELECT * FROM users WHERE `name`='%s' AND `password`='%s'",playername2,password);
    new Cache: cache = mysql_query(SQL,qstr);

    if(cache_num_rows())
    {
      	cache_get_value_name(0, "password", PlayerInfo[playerid][pKey], 128);
        cache_get_value_name_int(0, "Level", PlayerInfo[playerid][pLevel]);
        cache_get_value_name_float(0, "pHealth", PlayerInfo[playerid][pHealth]);
        //Aici convertesti restu lucrurilor

        //Astea trebuie sterse, dar ti-am lasat exemplu de vechea functie vs noua functie(deasupra)
        mysql_fetch_field_row(result,"password"); format(PlayerInfo[playerid][pKey], 128, result);
        mysql_fetch_field_row(result,"Level"); PlayerInfo[playerid][pLevel] = strval( result );
        mysql_fetch_field_row(result,"pHealth"); PlayerInfo[playerid][pHealth] = floatstr( result );
    }
    cache_delete(cache);
}

Edit: Si foloseste acel wiki sa vezi cum e si ce face fiecare functie

mysql_fetch_field_row(result,"MarriedTo"); strmid(PlayerInfo[playerid][pMarriedTo], result, 0, strlen(result), 255);

si cu asta cum fac

Link to comment
Share on other sites

9 minutes ago, Banditul said:

Este tot string deci va fi cu  cache_get_value_name , cele cu strmid sunt stringuri


C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(2437) : warning 213: tag mismatch
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(2647) : error 017: undefined symbol "mysql_real_escape_string"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(2649) : warning 213: tag mismatch
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(2650) : error 017: undefined symbol "mysql_store_result"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(2651) : error 017: undefined symbol "mysql_num_rows"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(2653) : error 017: undefined symbol "mysql_free_result"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(2660) : error 017: undefined symbol "mysql_fetch_row"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(2662) : error 017: undefined symbol "mysql_free_result"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(2671) : error 017: undefined symbol "mysql_real_escape_string"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(2674) : error 017: undefined symbol "mysql_store_result"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(2675) : error 017: undefined symbol "mysql_num_rows"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(2677) : error 017: undefined symbol "mysql_free_result"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(2684) : error 017: undefined symbol "mysql_fetch_row"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(2686) : error 017: undefined symbol "mysql_free_result"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(2695) : error 017: undefined symbol "mysql_real_escape_string"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(2698) : error 017: undefined symbol "mysql_store_result"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(2699) : error 017: undefined symbol "mysql_num_rows"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(2701) : error 017: undefined symbol "mysql_free_result"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(2708) : error 017: undefined symbol "mysql_fetch_row"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(2710) : error 017: undefined symbol "mysql_free_result"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(4428) : error 017: undefined symbol "mysql_store_result"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(4429) : error 017: undefined symbol "mysql_num_rows"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(4437) : error 017: undefined symbol "mysql_free_result"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(9329) : error 017: undefined symbol "mysql_store_result"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(9330) : error 017: undefined symbol "mysql_retrieve_row"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(9332) : error 017: undefined symbol "mysql_fetch_field_row"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(9334) : error 017: undefined symbol "mysql_free_result"
C:\Users\AndreiB\Desktop\Saints-Network Original\gamemodes\saints.pwn(11214) : error 017: undefined symbol "mysql_store_result"

Compilation aborted.Pawn compiler 3.2.3664              Copyright (c) 1997-2006, ITB CompuPhase


26 Errors.

 

De aici sunt cele mai multe

public MySQLCheckCar(carname[])
{
    new query[128];
    new escstr[MAX_PLAYER_NAME];
    mysql_real_escape_string(carname, escstr);
    format(query, sizeof(query), "SELECT `ID` FROM stock WHERE `Car` = '%s'", escstr);
    mysql_query(SQL,query);
    mysql_store_result();
    if (mysql_num_rows()==0)
    {
        mysql_free_result();
        return 0;
    }
    else
    {
        new strid[32];
        new intid;
        mysql_fetch_row(strid);
        intid = strval(strid);
        mysql_free_result();
        return intid;
    }
}

public MySQLCheckClan(sqlclanname[])
{
    new query[128];
    new escstr[MAX_PLAYER_NAME];
    mysql_real_escape_string(sqlclanname, escstr);
    format(query, sizeof(query), "SELECT `ID` FROM users WHERE `ClanTag` = '%s'", escstr);
    mysql_query(SQL,query);
    mysql_store_result();
    if (mysql_num_rows()==0)
    {
        mysql_free_result();
        return 0;
    }
    else
    {
        new strid[32];
        new intid;
        mysql_fetch_row(strid);
        intid = strval(strid);
        mysql_free_result();
        return intid;
    }
}

public MySQLCheckAccount(sqlplayersname[])
{
    new query[128];
    new escstr[MAX_PLAYER_NAME];
    mysql_real_escape_string(sqlplayersname, escstr);
    format(query, sizeof(query), "SELECT `ID` FROM users WHERE `name` = '%s'", escstr);
    mysql_query(SQL,query);
    mysql_store_result();
    if (mysql_num_rows()==0)
    {
        mysql_free_result();
        return 0;
    }
    else
    {
        new strid[32];
        new intid;
        mysql_fetch_row(strid);
        intid = strval(strid);
        mysql_free_result();
        return intid;
    }
}

Edited by AndreiB
Link to comment
Share on other sites

public MySQLCheckCar(carname[])
{
	new query[90], Cache: result, id;
	mysql_format(SQL, query, sizeof(query), "SELECT `ID` FROM stock WHERE `Car` = '%e'", carname);
	result = mysql_query(SQL,query);

	if (!cache_num_rows())
		id = 0;
	else
		cache_get_value_name_int(0, "ID", id);
	
	cache_delete(result);
	return id;
}

public MySQLCheckClan(sqlclanname[])
{
	new query[128], Cache: result, id;
	mysql_format(SQL, query, sizeof(query), "SELECT `ID` FROM users WHERE `ClanTag` = '%e'", sqlclanname);
	result = mysql_query(SQL,query);

	if (!cache_num_rows())
		id = 0;
	else
		cache_get_value_name_int(0, "ID", id);
	
	cache_delete(result);
	return id;
}

public MySQLCheckAccount(sqlplayersname[])
{
	new query[128], Cache: result, id;

	mysql_format(SQL, query, sizeof(query), "SELECT `ID` FROM users WHERE `name` = '%e'", sqlplayersname);
	result = mysql_query(SQL,query);

	if (!cache_num_rows())
		id = 0;
	else
		cache_get_value_name_int(0, "ID", id);
	
	cache_delete(result);
	return id;
}

Practic:

mysql_free_result(); devine delete_cache(); (asta daca ai ai facut mysql_query in felul asta:

new Cache: cache = mysql_query(...);
//Fa chestie aici cu cache-u

cache_delete(cache);

mysql_store_result() e acea parte cu new Cache: cache 

mysql_num_rows() devine cache_num_rows()

iar mysql_real_escape_string(); se poate introduce in mysql_format cu ajutorul %e in loc de %s (face automat escape la string)

Link to comment
Share on other sites

11 hours ago, Banditul said:

public MySQLCheckCar(carname[])
{
	new query[90], Cache: result, id;
	mysql_format(SQL, query, sizeof(query), "SELECT `ID` FROM stock WHERE `Car` = '%e'", carname);
	result = mysql_query(SQL,query);

	if (!cache_num_rows())
		id = 0;
	else
		cache_get_value_name_int(0, "ID", id);
	
	cache_delete(result);
	return id;
}

public MySQLCheckClan(sqlclanname[])
{
	new query[128], Cache: result, id;
	mysql_format(SQL, query, sizeof(query), "SELECT `ID` FROM users WHERE `ClanTag` = '%e'", sqlclanname);
	result = mysql_query(SQL,query);

	if (!cache_num_rows())
		id = 0;
	else
		cache_get_value_name_int(0, "ID", id);
	
	cache_delete(result);
	return id;
}

public MySQLCheckAccount(sqlplayersname[])
{
	new query[128], Cache: result, id;

	mysql_format(SQL, query, sizeof(query), "SELECT `ID` FROM users WHERE `name` = '%e'", sqlplayersname);
	result = mysql_query(SQL,query);

	if (!cache_num_rows())
		id = 0;
	else
		cache_get_value_name_int(0, "ID", id);
	
	cache_delete(result);
	return id;
}

Practic:

mysql_free_result(); devine delete_cache(); (asta daca ai ai facut mysql_query in felul asta:


new Cache: cache = mysql_query(...);
//Fa chestie aici cu cache-u

cache_delete(cache);

mysql_store_result() e acea parte cu new Cache: cache 

mysql_num_rows() devine cache_num_rows()

iar mysql_real_escape_string(); se poate introduce in mysql_format cu ajutorul %e in loc de %s (face automat escape la string)

Imi poti da un exemplu la ala cu new cache si mysql_real_escape_string te rog si la asta mysql_fetch_row(strid);

Edited by AndreiB
Link to comment
Share on other sites

Desigur. Iti datorez o explicatie mai ales ca ti-am dat codul gata facut. 

public MySQLCheckCar(carname[])
{
    new query[128];
    new escstr[MAX_PLAYER_NAME];
    mysql_real_escape_string(carname, escstr);//Asta e functia care face escape la string pentru nu lasa pe nimeni sa iti dea SQL Injection, dar in versiunile noi de MySQL a fost introdusa automat in mysql_format deci poate fie stearsa
    mysql_format(SQL, query, sizeof(query), "SELECT `ID` FROM stock WHERE `Car` = '%e'", escstr);//mysql_format il vei folosi pentru toate query(stiu ca nu e nevoie dar astfel vei stii care e format pt mysql si care nu) si are introdus un now specificator %e pentru stringuri care va face escape automat
    mysql_query(SQL,query); //Asta e funtia care trimite un query care va fi executat imediat(serverul se va opri pana se primeste raspuns de la baza de date) si care va crea un cache(memorie temporara) si vei folosi new Cache: cache = mysql_query pentru a putea sterge acea memorie temporara si a nu aglomera memoria hostului(daca nu va fi stearsa la un moment dat serverul va putea intra in insuficienta de memorie)
    mysql_store_result(); //ASta e o functie veche pentru a face acelasi lucru pe care il face new Cache: cache = mysql_query, deci este inutila in r40 deci va fi stearsa
    if (mysql_num_rows()==0)//Asta se explica de la sine, verifica daca a fost returnat sau nu un rezultat(se modifica cu cache_num_rows())
    {
        mysql_free_result();//Acesta este functia care scapa de acea memorie temporara, dar acum stocam o referinta a acelei memori in variabila Cache: cache deci von folosi cache_delete(cache)
        return 0;
    }
    else
    {
        new strid[32];
        new intid;
        mysql_fetch_row(strid);//Aceasa functie era folosita pentru a prelua rezultatu intors din baza de date si stocarea lui intr-un string apoi transformat intr-un integer, dara acum vei folosi direct cache_get_value_name_int(0, "ID", intid) care va prelua direct valoarea stocata in baza de date la ID si o va pune direct in variabila intid fara sa mai transforme nimic
        intid = strval(strid);
        mysql_free_result();
        return intid;
    }
}
//Asta e echivalentul functie de mai sus(scrisa cat mai asemanatoare)
public MySQLCheckCar(carname[])
{
    new query[128];
    mysql_format(SQL, query, sizeof(query), "SELECT `ID` FROM stock WHERE `Car` = '%e'", carname);
    new Cache: cache = mysql_query(SQL,query);

    if (cache_num_rows() == 0)
    {
        cache_delete(cache);
        return 0;
    }
    else
    {
        new intid;
        cache_get_value_name_int(0, "ID", intid);
        cache_delete(cache);
        return intid;
    }
}

Stiu ca ce ti-am dat eu mai sus cu cateva reply-uri nu seamana cu ce ti-am dat acum dar acolo am incercat sa il fac cat mai compact si de inteles. Si sper sa intelegi, nu sunt prea bun la explicat dar incerc

@AndreiB

EDIT: Nu recomand sa lasi mysql_query la query de forma "UPDATE ETC ETC", recomand sa il transformi in mysql_tquery

Edited by Banditul
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.