mysql_function_query(connectionHandle, query[], bool:cache, callback[], format[], {Float,_}:... )
public OnPlayerConnect(playerid)
{
new string[32], name[24];
GetPlayerName(playerid, name, 24);
mysql_format(1, string, 128, "SELECT ID FROM Accounts WHERE Username='%e'", name); //este es un format especial en el cual al poner %e haria lo mismo que la funcion mysql_real_escape_string, para evitar SQL Injections
mysql_function_query(1, string, true, "OnPlayerExistsOnDB", "i", playerid);
return 1;
}
//me da paja poner el forward
public OnPlayerExistsOnDB(playerid)
{
new rows, fields;
cache_get_data(rows, fields);
if(rows)
{
SendClientMessage(playerid, -1, "Esta cuenta existe usa /login contraseсa");
}
else
{
SendClientMessage(playerid, -1 "Esta cuenta no esta registrada, usa /register");
}
return 1;
}
mysql_format(1, string, "SELECT ID FROM Accounts WHERE Username='%e'", name); //este es un format especial en el cual al poner %e haria lo mismo que la funcion mysql_real_escape_string, para evitar SQL Injections
mysql_format( connectionHandle, output[], format[], {Float,_}:... )
de hecho, darнa error de que agregastes un argumento de mбs en mysql_format
serнa asн: pawn Код:
pawn Код:
|
enum pData
{
ID,
Username[24],
Password[64],
Admin,
};
new pInfo[MAX_PLAYERS][pData];
//consulta: SELECT * FROM Accounts WHERE Username='Pepe' AND Password='123', me da paja poner todo mysql_function_query
//La fila tendria los siguientes datos id:8, username:Pepe, password:123 y admin:4
new OnPlayerLogin(playerid)
{
new rows,fields;
cache_get_data(rows,fields);
if(!rows) return SendClientMessage(playerid, -1, "Usuario o contraseсa incorrectos"),1;
new var[16];
cache_get_row(0, 0, var); //fila 0 campo 0, o sea ID se guarda en var, una string.
pInfo[playerid][ID] = strval(var); //transforma string a int, si es float en vez de strval usa floatstr
cache_get_row(0, 1, pInfo[playerid][Username]);//fila 0 campo 1, seria el campo que le sigue
cache_get_row(0, 2, pInfo[playerid][Password]); //se guardan directamente en sus variables ya que son strings
cache_get_row(0, 3, var); //fila 0 campo 0, o sea ID se guarda en var, una string.
pInfo[playerid][Admin] = strval(var);
SendClientMessage(playerid, -1, "Login exitoso");
return 1;
}
function InsertDB(playerid){
new rows,fields,guita;
new query[128];
cache_get_data(rows,fields);
if(!rows) return SendClientMessage(playerid, COLOR_WHITE, "Mal");
new var[16];
cache_get_row(0, 0, var);
guita = strval(var);
new dinero = guita + 5;
format(query, sizeof(query), "INSERT INTO depositos (Dinero) VALUES (%d) ",dinero);
mysql_function_query(1, query, false, "", "i");
return 1;
}
CMD:ponerdinero(playerid,params[]){
new query[180];
format(query, sizeof(query), "SELECT Dinero FROM depositos ");
mysql_function_query(1, query, true, "InsertDB", "i", playerid);
return 1;
}
Checkie con la base de datos, y lo que hace es crear una nueva linea con un nuevo valor de Dinero, pero yo lo que quiero es que modifique la existente, y no quiero una linea nueva
|
public InsertDB(playerid)
{
new rows,fields,guita;
new query[128];
cache_get_data(rows,fields);
if(!rows) return SendClientMessage(playerid, COLOR_WHITE, "Mal");
new var[16];
cache_get_row(0, 0, var);
guita = strval(var);
new dinero = guita + 5;
format(query, sizeof(query), "UPDATE depositos SET Dinero=%d LIMIT 1",dinero);
mysql_function_query(1, query, false, "", "");
return 1;
}
CMD:ponerdinero(playerid,params[])
{
new query[180];
format(query, sizeof(query), "SELECT Dinero FROM depositos LIMIT 1");
mysql_function_query(1, query, true, "InsertDB", "i", playerid);
return 1;
}
//Mбs optimizado...
CMD:ponerdinero(playerid,params[])
{
mysql_function_query(1, "UPDATE depositos SET Dinero=Dinero+5 LIMIT 1", false, "", "");
return 1;
}