[Ajuda] Problema carregar ID faction recem criada MYSQL
#1

To com um problema, qnd o cara cria a faction, preciso pegar esse novo ID criado pra colocar como fmembro (a variavel) e outras comparaзхes, mas do jeito que eu to fazendo vem 0, como eu faзo?
Код:
	CMD:fcreate(playerid, params[]) {
		new string[40], query[128];
		if(scorelevel[playerid] < 500) return SendClientMessage(playerid, COLOR_RED, "Vocк precisa ter score/level 500 para criar uma faction");
		if(GetPlayerMoney(playerid) < 5000000) return SendClientMessage(playerid, COLOR_RED, "You do not have 5000000");
		if(fmembro[playerid] > 0) return SendClientMessage(playerid, COLOR_RED, "Vocк jб tem uma faction");
		
		new localfname[32];
		if(sscanf(params,"s", localfname)) return SendClientMessage(playerid, -1, "Use: /fcreate [name]");
		
        format(query, sizeof(query), "INSERT INTO `factions` (`facname`) VALUES ('%s')"
        ,
			localfname );
        mysql_query(ConnectMYSQL,query);
		
		new novafacid, consulta;
		consulta = cache_get_field_content_int(0, "ID");     				novafacid = consulta;

		fmembro[playerid] = novafacid;
		fcargo[playerid] = 5;
		GivePlayerMoney(playerid,-5000000);
		
		new facid = fmembro[playerid];
		FactionInfo[facid][facname] = localfname;
		
		format(string, sizeof(string), "%s (id:%i) criada! (/fhelp)", FactionInfo[facid][facname], novafacid );
		SendClientMessage(playerid, COLOR_GREEN, string);
		
        return 1;	
	}
Reply
#2

Utilize esta funзгo .
Reply
#3

Use mysql_insert_id(); para obter o ID.
Reply
#4

To com o mesmo problema e nгo sabia, como usa essa func?
Reply
#5

Essa funзгo retorna o insert_id (valor inteiro do auto_increment), essa funзгo jб salvou minha vida xD

OBS: Essa funза й R33+ se nгo me engano, usabilidade:

Код:
CMD:insertuser(playerid)
{
new name[24], query[128]; GetPlayerName(playerid, name, 24); mysql_format(handler, query, sizeof(query), "INSERT INTO `users` VALUES('NULL', '%s', 1234)", name); //NULL = coluna do auto_increment (id), serб ignorado pelo mysql quando criado e terб um valor automбtico mysql_tquery(handler, query, "OnInsert", " ", " ");//sem parвmetros na public return 1;
} forward OnInsert(); public OnInsert() {
new PlayerInfo[playerid][id] = mysql_insert_id(); //...
}
Estrutura da tabela `users`:
  • id
  • nome
  • senha
Reply
#6

Quote:
Originally Posted by n0minal
Посмотреть сообщение
Essa funзгo retorna o insert_id (valor inteiro do auto_increment), essa funзгo jб salvou minha vida xD

OBS: Essa funза й R33+ se nгo me engano, usabilidade:

Код:
mysql_format(handler, query, sizeof(query), "INSERT INTO `users` VALUES('NULL', ...);
mysql_tquery(handler, query, "OnInsert", "");
//NULL = coluna do auto_increment, serб ignorado pelo mysql

forward OnInsert();
public OnInsert()
{
new PlayerInfo[playerid][id] = mysql_insert_id();
//...
}
Nгo consegui pegar como usar, pode fazer com o codigo dele como exemplo pra eu tentar adaptar pro meu?
Reply
#7

Quote:
Originally Posted by maikons
Посмотреть сообщение
Nгo consegui pegar como usar, pode fazer com o codigo dele como exemplo pra eu tentar adaptar pro meu?
Й auto-explicativo cara '-' Jб fiz o exemplo, qual versгo do MySQL vocк usa?

@edit: Corrigi o exemplo, tenta entender lб.
Reply
#8

Pra mim й embolado, vc consegue fazer pra rodar nesse comando dele, dai eu tento adaptar aqui pro meu pra ver se aprendi?
Reply
#9

Tbm nгo entendi... entгo no meu caso ficaria assim?
Код:
	CMD:fcreate(playerid, params[]) {
		new string[40], query[128];
		if(scorelevel[playerid] < 500) return SendClientMessage(playerid, COLOR_RED, "Vocк precisa ter score/level 500 para criar uma faction");
		if(GetPlayerMoney(playerid) < 5000000) return SendClientMessage(playerid, COLOR_RED, "You do not have 5000000");
		if(fmembro[playerid] > 0) return SendClientMessage(playerid, COLOR_RED, "Vocк jб tem uma faction");
		
		new localfname[32];
		if(sscanf(params,"s", localfname)) return SendClientMessage(playerid, -1, "Use: /fcreate [name]");
		
        format(query, sizeof(query), "INSERT INTO `factions` (`facname`) VALUES ('%s')"
        ,
			localfname );
        mysql_query(ConnectMYSQL,query);
		
		
		
		
		new novafacid, consulta;
		//consulta = cache_get_field_content_int(0, "ID");     				novafacid = consulta;
		novafacid = mysql_insert_id();
		
		
		
		fmembro[playerid] = novafacid;
		fcargo[playerid] = 5;
		GivePlayerMoney(playerid,-5000000);
		
		new facid = fmembro[playerid];
		FactionInfo[facid][facname] = localfname;
		
		format(string, sizeof(string), "%s (id:%i) criada! (/fhelp)", FactionInfo[facid][facname], novafacid );
		SendClientMessage(playerid, COLOR_GREEN, string);
        return 1;	
	}
Reply
#10

Primeiramente, utilize a versгo mais atualizada do MySQL. Vocк terб que readaptar todo seu cуdigo, mas terб um sistema muito mais rбpido, estбvel e mais funcional.

https://github.com/pBlueG/SA-MP-MySQL/releases

Essa versгo do MySQL trabalha com cache, leia este tutorial:

https://sampforum.blast.hk/showthread.php?tid=337810

E agora para resolver seu problema, a soluзгo й simples.
Faзa a consulta de inserзгo, e entгo na callback de resposta do MySQL, pegue o ID ъnico da ъltima linha inserida. Este serб o ID da facзгo:

pawn Код:
CMD:criarfacao(playerid,params[])
{
    // Seu comando de criar facзгo bla bla bla
   
    format(query,sizeof query,"INSERT INTO factions (facname) VALUES ('%s');",localfname);
    mysql_function_query(mysqlhandle,query,true,"r@MySQL_CreateFaction","d",playerid) // importante deixar o cache como TRUE.

    return 1;
}

// Declarar a callback de resposta (topo do GM)
forward r@MySQL_CreateFaction(playerid); // Playerid й quem criou a facзгo.

public r@MySQL_CreateFaction(playerid)
{
    // A partir daqui, o MySQL pode retornar um erro (caso algo tenha dado errado)
    // Ou o ID da facзгo criada, que pode ser acessado pela funзгo mysql_insert_id();
   
    Player[playerid][faccao] = mysql_insert_id();
   
    SendClientMessage(playerid,-1,"Sua facзгo foi criada com sucesso!");
   
    // outras coisas bla bla bla

    return 1;
}
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)