[MYSQL] mysql_pquery - mysql_tquery - mysql_query
#1

Hola comunidad SAMP, he estado aprendiendo sobre bases de datos en MYSQL, y me ha resultado una duda ya que segъn voy testeando me trae algъn problema las funciones. Es esto:

Cuando selecciono una base de datos; con lo poco de inglйs que se y segъn entendн en el Wiki, hay formar de mandar el query a la bases de datos, y entre estas estбn:

Код:
mysql_pquery(Para Callbacks) //Ignoremos esta.
mysql_tquery(Para funciones)
mysql_query(Normal)
Y quiero mandar un query a la base de datos para preguntar si el usuario existe:
Код:
mysql_format(MYSQL, query, sizeof(query), "SELECT `Nombre` FROM `Usuarios` WHERE `Nombre` = '%e' LIMIT 1", Jugador[playerid][iNombre]);
El problema estб en que la mayorнa de los tutoriales, indican que hay que mandar un query mediante una funciуn para ejecutarlo. Y yo no deseo hacerlo.

Entonces estoy usando mysql_query(MYSQL, query) para mandarlo y que pregunte por el usuario y de vuelva las filas para saber si estб o no.

Mi pregunta estб en: їQue consecuencias tengo de usar mysql_query en vez de mysql_tquery? o esta bien lo que estoy haciendo.

Este es el codigo en el OnPlayerConnect para saber si existe el usuario o no.
Код:
mysql_format(MYSQL, query, sizeof(query), "SELECT `Nombre` FROM `Usuarios` WHERE `Nombre` = '%e' LIMIT 1", Jugador[playerid][iNombre]); 
mysql_query(MYSQL, query);

if(cache_num_rows())
{
	JugadorEstaRegistrando[playerid] = false;

	TextDrawUse(playerid, 0); //Muestra un textdraw de ingreso.
	SelectTextDraw(playerid, GRIS);
				
	print("El jugador existe!");
} else {
	InicializarRegistro(playerid);

	TextDrawUse(playerid, 0);
	SelectTextDraw(playerid, GRIS);//Muestra un textdraw de registro.
				
	print("El jugador no existe");
}
Reply
#2

Ayuda con esto por favor, necesito saberlo por que no se si tengo errores con el mysql.
Reply
#3

Prueba esto:

PHP код:
mysql_format(MYSQLquerysizeof(query), "SELECT `Nombre` FROM `Usuarios` WHERE `Nombre` = '%e' LIMIT 1"Jugador[playerid][iNombre]); 
mysql_query(MYSQLquery);
new 
rowsfields;
cache_get_data(rowsfieldsMYSQL); // Obtiene la cantidad de columnas y filas
if(rows// Si hay una fila existente, quiere decir que estб registrado
{
    
JugadorEstaRegistrando[playerid] = false;
    
TextDrawUse(playerid0); //Muestra un textdraw de ingreso.
    
SelectTextDraw(playeridGRIS);
                
    print(
"El jugador existe!");
} else {
    
InicializarRegistro(playerid);
    
TextDrawUse(playerid0);
    
SelectTextDraw(playeridGRIS);//Muestra un textdraw de registro.
                
    
print("El jugador no existe");

EDIT

Por cierto... Si pones mysql_log(LOG_ALL) donde conectas con el servidor, esto producirб un archivo en donde se guardaran todos los log's del MySql.

PHP код:
stock ConectarMySql()
{
    
mysql_log(LOG_ALL); // <----
    
MySql mysql_connect(bd_hostbd_userbd_dbbd_pass);
    if(
mysql_errno() != 0)
    {
         
printf("[MySQL] La conexiуn no se ha podido realizar.");
         
SendRconCommand("exit"); // cerramos el servidor para evitar problemas
    
}
    else
    {
        
printf("[MySQL] La conexiуn se ha realizado correctamente.");
    }
    return 
1;

Reply
#4

Si, esto ya lo sabia bro, gracias por tu respuesta, pero lo que necesitaba saber de que manera deberнa mandar el query si por funciуn o en el mismo lugar donde estoy haciendo el format, para no confudirte, si usar mysql_query o mysql_tquery.

En este code creo que es innecesario pedir las filas y columnas(campos), por que cache_num_rows() lo hace me retorna las filas; sin tener que usar la otra funciуn.
Код:
mysql_format(MYSQL, query, sizeof(query), "SELECT `Nombre` FROM `Usuarios` WHERE `Nombre` = '%e' LIMIT 1", Jugador[playerid][iNombre]);  
mysql_query(MYSQL, query); 

new rows, fields; 
cache_get_data(rows, fields, MYSQL); // Obtiene la cantidad de columnas y filas 
if(rows) // Si hay una fila existente, quiere decir que estб registrado 
{ 
    JugadorEstaRegistrando[playerid] = false; 

    TextDrawUse(playerid, 0); //Muestra un textdraw de ingreso. 
    SelectTextDraw(playerid, GRIS); 
                 
    print("El jugador existe!"); 
} else { 
    InicializarRegistro(playerid); 

    TextDrawUse(playerid, 0); 
    SelectTextDraw(playerid, GRIS);//Muestra un textdraw de registro. 
                 
    print("El jugador no existe"); 
}
Ah PD: gracias por el acordarme lo del log, si lo use y me sirviу mucho para detectar los errores y todo, gracias a este ya vi que errores tengo.
Reply
#5

Yo uso 'mysql_tquery' cuando quiero obtener una respuesta a esa acciуn, por ejemplo: cuando alguien ingresa al servidor, obtengo una respuesta para comprobar si estб registrado en la base de datos, esa funciуn guarda un cache por defecto.

Код:
public OnPlayerConnect(playerid)
{
    new g_query[86];
    mysql_format(connectionHandle, g_query, sizeof(query), "SELECT * FROM `usuarios` WHERE .. = '%e' LIMIT 1", {Float,_:...});
    mysql_tquery(connectionHandle, g_query, "Respuesta", "i", playerid);
}

forward Respuesta(playerid);
public Respuesta(playerid)
{
    if (cache_num_rows())
    {
        // La repuesta es positiva(Estб registrado)
    }
    else{
        // La respuesta fue negativa!(No estб registrado)
    }
}
Y utilizo 'mysql_query' cuando estoy seguro de algo y no necesito respuesta, por ejemplo: cuando alguien estб registrado y quiero actualizar sus datos.

Код:
public OnPlayerDisconnect(playerid, reason)
{
    new g_query[86];
    mysql_format(connectionHandle, g_query, sizeof(g_query), "UPDATE `usuarios` SET .. WHERE .. = '..' LIMIT 1" {Float,_:...});
    mysql_query(conhandle, g_query, false);
}
Reply
#6

Gracias por tu respuesta, pero sabias que el mysql_query tambiйn guarda un cache?, y este debe ser almacenado, tengo muchas dudas con este, al guardarlo debe ser despuйs eliminado, no tengo ni la menor idea de para que puede ser ъtil despuйs?.

Por lo que he testeado, (no estoy seguro), la ъnica diferencia entre el query y el tquery es que el tquery envia la respuesta por funciуn y el query lo hace inmediatamente despuйs de haberlo llamado.

Si estoy errуneo alguien que me corrija por favor.
Reply
#7

Sн, sн lo sabia, pero en la funciуn "mysql_query" hay un parбmetro para hacer valido el uso de un cache o no, en mi anterior respuesta no guardarб cache.

Sн, bбsicamente una es para hacer una consulta y la otra para hacer una consulta y obtener una respuesta

En mysql_query el ъltimo parбmetro es para guardar o no guardar un cache y en mysql_tquery siempre guardarб un cache.

pawn Код:
native mysql_query(conhandle, query[], bool:use_cache = true);
Reply
#8

Te hago una pregunta, hay forma de hacer un consulta obteniendo respuesta sin tener que hacer uso de una nueva funciуn?, tengo esto mira:

PHP код:
GetPlayerNameEx(playeridJugador[playerid][iNombre], 24); //Obtiene el nombre sin el _ : Nombre Apellido
mysql_format(MYSQLquerysizeof(query), "SELECT `Nombre` FROM `Usuarios` WHERE `Nombre` = '%e' LIMIT 1"Jugador[playerid][iNombre]); 
resultado mysql_query(MYSQLquery);
            
    if(
cache_num_rows())
        print(
"El jugador existe!");
    else print(
"El jugador no existe");
cache_delete(resultado); 
Reply
#9

Quote:
Originally Posted by TheMatius
Посмотреть сообщение
Te hago una pregunta, hay forma de hacer un consulta obteniendo respuesta sin tener que hacer uso de una nueva funciуn?, tengo esto mira:

PHP код:
GetPlayerNameEx(playeridJugador[playerid][iNombre], 24); //Obtiene el nombre sin el _ : Nombre Apellido
mysql_format(MYSQLquerysizeof(query), "SELECT `Nombre` FROM `Usuarios` WHERE `Nombre` = '%e' LIMIT 1"Jugador[playerid][iNombre]); 
resultado mysql_query(MYSQLquery);
            
    if(
cache_num_rows())
        print(
"El jugador existe!");
    else print(
"El jugador no existe");
cache_delete(resultado); 
Sн, pero recuerda que la variable resultado debe ser definida como cache:

PHP код:
    new Cache:resultado;
    
resultado mysql_query(MYSQLquery);
    if(
cache_num_rows())
    {
        print(
"El jugador existe!");
    else
    {
        print(
"El jugador no existe");
    }
    
cache_delete(resultado); 
Reply
#10

Si se me habнa olvidado, xd, bueno, creo que con esto me defiendo gracias a los 2. rep++
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)