Necesito ayuda con a_mysql.
#1

Sin mбs irй al grano.

Estoy aprendiendo un poco sobre mysql para asн poder crear mis gamemodes directamente con este mйtodo, he estado haciendo unas pruebas con el plugin, segъn que visto la manera de comprobar si la cuenta existe es cogiendo algъn dato en la tabla del usuario y tratando de encontrar errores, si los encuentra significa que existe, de lo contrario la cuenta no existe.

He hecho este cуdigo, el problema es que la cuenta sн existe y no me envнa el print que he puesto.

pawn Код:
public OnPlayerConnect(playerid)
{
new name[MAX_PLAYER_NAME], solicitud[254];
GetPlayerName(playerid, name, sizeof(name));
format(solicitud, sizeof(solicitud), "SELECT IP FROM `usuarios` WHERE user = '%s' LIMIT 1",name);
mysql_query(mysql, solicitud);
if(cache_warning_count()) print("ESTA CUENTA EXISTE DE VERDAD.");
}
Reply
#2

La consulta que estбs mandando no retorna ningъn error o advertencia, por eso nunca se ejecutarб. Lo que retorna es el nъmero de filas que correspondan con la consulta, usualmente 0 si no hay nada.

pawn Код:
public OnPlayerConnect(playerid)
{
    new name[MAX_PLAYER_NAME], solicitud[254];
    GetPlayerName(playerid, name, sizeof(name));
    format(solicitud, sizeof(solicitud), "SELECT IP FROM `usuarios` WHERE user = '%s' LIMIT 1", name);
    mysql_query(mysql, solicitud);

    // Obtenemos el nъmero de filas...
    new cuentas = cache_num_rows();

    if(cuentas) print("ESTA CUENTA EXISTE DE VERDAD);
    else print("
No hay cuentas con este nombre.");
     
    return true;
}
Ademбs, ten en cuenta que estбs usando funciones tipo cache. Para evitar pйrdidas de memoria (que podrнan hacer que tu servidor falle/se caiga), debes almacenarlo en una variable y eliminarlo cuando no lo necesites.

pawn Код:
public OnPlayerConnect(playerid)
{
    new name[MAX_PLAYER_NAME], solicitud[254];
    GetPlayerName(playerid, name, sizeof(name));
    format(solicitud, sizeof(solicitud), "SELECT IP FROM `usuarios` WHERE user = '%s' LIMIT 1", name);

    // Almacenamos el resultado de la consulta en una variable para despuйs eliminarlo
    new Cache:resultado = mysql_query(mysql, solicitud);

    // Obtenemos el nъmero de filas...
    new cuentas = cache_num_rows();

    if(cuentas) print("ESTA CUENTA EXISTE DE VERDAD.");
    else print("No hay cuentas con este nombre.");

   // Eliminamos el resultado/cache que habнamos almacenado previamente
    cache_delete(resultado);
    return true;
}
Te recomiendo usar threaded queries en vez de usar las normales, ya que podrнan afectar el rendimiento del servidor si alguien llegara, por ejemplo, a usar alguna herramienta que le permitiera hacer mъltiples conexiones en un corto periodo de tiempo. Y te ahorrarнas todo ese trabajo de guardar el cache y eliminarlo cuando no lo necesites. No es tan difнcil usarlas.

pawn Код:
public OnPlayerConnect(playerid)
{
    new name[MAX_PLAYER_NAME], solicitud[254];
    GetPlayerName(playerid, name, sizeof(name));
    //                                           0
    //                                           |            
    format(solicitud, sizeof(solicitud), "SELECT IP FROM `usuarios` WHERE user = '%s' LIMIT 1", name);
    mysql_tquery(mysql, solicitud, "VerificarCuenta", "i", playerid);    
    return true;
}

forward VerificarCuenta(playerid);
public VerificarCuenta(playerid)
{

    // Obtenemos el nъmero de filas...
    new cuentas = cache_num_rows();

    if(cuentas)
    {
          // Si existe, almacenamos la IP del jugador
          new IP[16];

          cache_get_row(0, 0, IP);
          // o...
          cache_get_field_content(0, "IP", IP);
         
          printf("ESTA CUENTA EXISTE DE VERDAD. (IP: %s)", IP);
    }
    else print("No hay cuentas con este nombre.");
    return true;
}
Reply
#3

que parametro pasas para playerid ? si vas a ayudar no enrolles mas
Reply
#4

pawn Код:
public OnPlayerConnect(playerid)
{
new name[MAX_PLAYER_NAME], solicitud[254];
GetPlayerName(playerid, name, sizeof(name));
format(solicitud, sizeof(solicitud), "SELECT IP FROM `usuarios` WHERE user = '%s' LIMIT 1",name);
mysql_query(mysql, solicitud);
if(cache_warning_count()) //Segъn he visto con esto podemos saber si existe..
{
new string[244];
format(string, sizeof(string), "Tъ cuenta existe, IP: %d"); //Esto lo pondrй mбs adelante.
SendClientMessage(playerid, -1, string);
print("ESTA CUENTA EXISTE DE VERDAD.");
}
else {
SendClientMessage(playerid, -1, "Tъ cuenta se ha registrado a la base de datos");
format(solicitud, sizeof(solicitud), "INSERT INTO `usuarios` (`Usuario`, `Password`, `IP`, `Rango`, `Premium`, `Dinero`, `PosX` ,`PosY`, `PosZ`) VALUES ('%s', 'test', 'test', 0, 0, 0, 0.0, 0.0, 0.0)",name);
mysql_query(mysql, solicitud);
}
}
Sigue sin detectarme si la cuenta existe y se siguen creando a pesar de existir.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)