[Modulo] MySQL Threads 1.2
#26
Lo puse asi y no me guarda los datos, intente con INSERT INTO y tambien con UPDATE, ahi te dejo codigo.
(15/07/2016, 07:57 PM)Exertency escribió:
Código PHP:
//code..
formatex(data2charsmax(data2), "INSERT INTO table (columna) VALUES ('%d')"Status)
mysql_query(g_Connection"query_handler2"data2
Responder
#27
Destro- Podrias hace un tutorial de como guardar datos.
Responder
#28
Destro, se pueden hacer múltiples selecciones en una misma query?

Me refiero a algo como esto (porción de code sacada del zp de Kiske):
Código PHP:
"SELECT \
    COUNT(id) AS rank \
FROM \
    users u \
WHERE \
    (u.lvl_total > (SELECT lvl_total FROM users u2 WHERE u2.id = %d) OR (u.lvl_total = (SELECT lvl_total FROM users u2 WHERE u2.id = %d) AND u.id <= %d)) AND u.id <> 1;" 
Believe, be yourself and don't hold on to just one dream ❤

https://github.com/FEDERICOMB96
Responder
#29
(23/12/2014, 01:22 AM)Destro escribió: el modulo no tiene soporte para múltiples consultas en un mismo query
puede que mas adelante le agregue soporte, pero ahora no tengo un internet decente para descargar todo lo que necesito para compilar el modulo.

Cuando crees que podrías agregar eso de las múltiples querys?
[Imagen: b_350_20_323957_202743_f19a15_111111.png]

Estudia siempre; el tiempo es oro, lo material se puede recuperar pero el tiempo no se puede recuperar.
(02/10/2016, 05:05 PM)meTaLiCroSS escribió: Siempre me gusta ayudar cuando alguien esta interesado realmente en ver que esta programando.
(08/08/2019, 05:32 PM)meTaLiCroSS escribió: grax x el dato cr4ck


Mis aportes

PLUGINS
MAPAS
Menú LANG [SF] Sistema de Frags
Say System (Admin Prefix)
Responder
#30
el modulo esta genial pero tiene un pequeño detalle, aveces cuando se laggea la base de datos o hace muchas consultas (en plugin_end con 32 players), aveces manda datos nulos, he visto en el phpmyadmin que el nombre y los demas campos estan vacios, a algunos usuarios se les reinician los datos
Competitive/Face it Pick Up Game (PUG) servidor de prueba: 45.77.94.109:27016 Click para Entrar
[Imagen: b_350_20_5A6C3E_383F2D_D2E1B5_2E3226.png]

(14/08/2015, 10:15 PM)Sugisaki escribió: "El mundo es caotico, irracional e injusto. No tiene ningun significado"
Palabras que desde hace mucho tiempo he buscado para describir, ¿Que es el mundo?
Crab

Código PHP:
if(ayuda && free)
{
    exit();

Responder
#31
fijate si se llama a la funcion handler cuando haces las consultas en plugin_end()


Código PHP:
new debug_mysql

public plugin_end()
{
   
debug_mysql true
   
   
for(id ........ <= maxplayers)
       
save_data(id)
}

save_data(id)
{
    ......

    
mysql_query(cn_handler" query_handler", .....) 
}

public 
query_handler(failstateerror[], errnumdata[], sizeFloat:queuetime)
{
    if(
debug_mysql)
    {
         new 
quey[512]

         
mysql_get_query(query511);

         
log_to_file("mysql_debug.log""consulta: [%s]"query)

    }

    .......



Responder
#32
(26/01/2017, 10:39 AM)Sugisaki escribió: el modulo esta genial pero tiene un pequeño detalle, aveces cuando se laggea la base de datos o hace muchas consultas (en plugin_end con 32 players), aveces manda datos nulos, he visto en el phpmyadmin que el nombre y los demas campos estan vacios, a algunos usuarios se les reinician los datos

Tampoco se pueden liberar los handle en plugin_end, yo supuse que era así y no los libero. Crashea el servidor si quiero hacer eso.

Yo particularmente no tengo problemas con mis guardados, proba en todo caso haciéndolos antes de plugin_end o a su vez deja que lo haga la misma forward client_disconnect, es más recomendable.
Believe, be yourself and don't hold on to just one dream ❤

https://github.com/FEDERICOMB96
Responder
#33
(26/01/2017, 01:14 PM)Federicomb escribió:
(26/01/2017, 10:39 AM)Sugisaki escribió: el modulo esta genial pero tiene un pequeño detalle, aveces cuando se laggea la base de datos o hace muchas consultas (en plugin_end con 32 players), aveces manda datos nulos, he visto en el phpmyadmin que el nombre y los demas campos estan vacios, a algunos usuarios se les reinician los datos

Tampoco se pueden liberar los handle en plugin_end, yo supuse que era así y no los libero. Crashea el servidor si quiero hacer eso.

Yo particularmente no tengo problemas con mis guardados, proba en todo caso haciéndolos antes de plugin_end o a su vez deja que lo haga la misma forward client_disconnect, es más recomendable.

si lo tengo con client_disconnect pero cuando se cambia de mapa se llama 32 veces (depende de jugadores) client_disconnect y a 1 o 2 players se les reinician/borran los datos y también me sucedió lo del "free handled" y lo quite, crasheaba el servidor al cambiar de mapa
Competitive/Face it Pick Up Game (PUG) servidor de prueba: 45.77.94.109:27016 Click para Entrar
[Imagen: b_350_20_5A6C3E_383F2D_D2E1B5_2E3226.png]

(14/08/2015, 10:15 PM)Sugisaki escribió: "El mundo es caotico, irracional e injusto. No tiene ningun significado"
Palabras que desde hace mucho tiempo he buscado para describir, ¿Que es el mundo?
Crab

Código PHP:
if(ayuda && free)
{
    exit();

Responder
#34
No es "tan" recomendable guardar los datos en plugin_end();
Lo más recomendable es llamar a la función cuando se desconecta un jugador, ya que al cambiarse de mapa, se "desconectan" y se vuelven a conectar.
Yo particularmente nunca tuve problemas con este módulo y al guardado (Y tengo como más de 100 datos que guardar mas o menos [Exagerando])

Lo que podrías hacer es usar un task (Flag D creo que era) con 25 segundos antes de que finalice el mapa, se le guarden los datos al jugador!

También puede ser el delay del guardado, entre que guarda y vuelve a cargar los datos al jugador puede también ser un problema!
Free agent - Vendo plugins, mods o apps del foro IPB (Invision community)
Contactarme vía Discord >>> AtselTV#8202
Responder
#35
(27/01/2017, 01:41 PM)CSAxel escribió: No es "tan" recomendable guardar los datos en plugin_end();
Lo más recomendable es llamar a la función cuando se desconecta un jugador, ya que al cambiarse de mapa, se "desconectan" y se vuelven a conectar.
Yo particularmente nunca tuve problemas con este módulo y al guardado (Y tengo como más de 100 datos que guardar mas o menos [Exagerando])

Lo que podrías hacer es usar un task (Flag D creo que era) con 25 segundos antes de que finalice el mapa, se le guarden los datos al jugador!

También puede ser el delay del guardado, entre que guarda y vuelve a cargar los datos al jugador puede también ser un problema!

Exactamente, al igual que él tengo guardo muchisimos datos y jamás he tenido problemas. El tema del delay que exista es otra cosa, pero perder datos por suerte no. Deberías probar otro método o revisar un poquito más a fondo que capaz tengas algún error y no te des cuenta.



El módulo permite mantener una conexión permanente (evitas conectarte en cada consulta) y por más que el servidor (remoto o local) te cierre la conexión, el mismo módulo se intenta reconectar, eso lo diferencia del módulo original de MySQL que no se reconectaba (desconozco si en 183 lo han mejorado).

Te dejo un ejemplo de como yo lo uso y me es efectivo:
Código PHP:
new Handle:g_SqlTuple;
new 
Handle:g_SqlConnect;

new const 
MYSQL_HOST[]         = "127.0.0.1";
new const 
MYSQL_USER[]         = "root";
new const 
MYSQL_PASS[]         = "pass";
new const 
MYSQL_DATABASE[]     = "database";

public 
plugin_init()
{
    new 
sError[64];
    new 
iError;

    
g_SqlTuple mysql_makehost(MYSQL_HOSTMYSQL_USERMYSQL_PASSMYSQL_DATABASE);
    
g_SqlConnect mysql_connect(g_SqlTupleiErrorsErrorcharsmax(sError));

    if(
iError) {
        
log_to_file("sql_error.log""[MySQL] Error de conexión con %s. [%d]- [%s]"MYSQL_HOSTiErrorsError);
        
set_fail_state("[MySQL] Error de conexión con %s. [%d]- [%s]"MYSQL_HOSTiErrorsError);
        return;
    }

    
mysql_performance(757510);

    
mysql_query(g_SqlConnect"MySQL_QueryHandler""SELECT COUNT(id) FROM table;");
}

public 
MySQL_QueryHandler(const failstate, const error[], const error_num, const data[], const size, const Float:queuetime) {
    if(
failstate != TQUERY_SUCCESS) {
        
log_to_file("sql_error.log""MySQL_QueryHandler - failstate:[%s] - num:[%d] - error:[%s]"failstate == TQUERY_CONNECT_FAILED "TQUERY_CONNECT_FAILED" "TQUERY_QUERY_FAILED"error_numerror);
        return;
    } 

    if(
mysql_num_results() > 0) {
        
server_print("IDs: %d"mysql_read_result(0));
    }


Con esto evitas múltiples conexiones innecesarias (por cada consulta) a la base de datos y una mejora de velocidad de respuesta del servidor.

En vez de usar el tuple (g_SqlTuple) usas el connect (g_SqlConnect). Seguramente ya lo sepas o no Thinking, capaz a alguien le pueda servir esta información. IfyouknowApproved
Believe, be yourself and don't hold on to just one dream ❤

https://github.com/FEDERICOMB96
Responder
#36
(27/01/2017, 01:41 PM)CSAxel escribió: No es "tan" recomendable guardar los datos en plugin_end();
Lo más recomendable es llamar a la función cuando se desconecta un jugador, ya que al cambiarse de mapa, se "desconectan" y se vuelven a conectar.
Yo particularmente nunca tuve problemas con este módulo y al guardado (Y tengo como más de 100 datos que guardar mas o menos [Exagerando])

Lo que podrías hacer es usar un task (Flag D creo que era) con 25 segundos antes de que finalice el mapa, se le guarden los datos al jugador!

También puede ser el delay del guardado, entre que guarda y vuelve a cargar los datos al jugador puede también ser un problema!

en el tema del delay lo tengo arreglado con un bool pero el detalles es que aveces cuando le da el ataque a la base de datos el modulo manda una consulta nula
probe entre el modulo oficial y este y el unico detalle es ese

gracias por sus respuesta
Competitive/Face it Pick Up Game (PUG) servidor de prueba: 45.77.94.109:27016 Click para Entrar
[Imagen: b_350_20_5A6C3E_383F2D_D2E1B5_2E3226.png]

(14/08/2015, 10:15 PM)Sugisaki escribió: "El mundo es caotico, irracional e injusto. No tiene ningun significado"
Palabras que desde hace mucho tiempo he buscado para describir, ¿Que es el mundo?
Crab

Código PHP:
if(ayuda && free)
{
    exit();

Responder
#37
Recomiendo, guardar los datos en el momento en el que cambian. Por ejemplo, guardas los frags y muertes de cada jugador? pues, apenas muera actualizarlo en la base de datos, lo mismo cada vez que mate a alguien para los frags.
Suena "pesado" pero en realidad no es nada. Son 32 jugadores máximo realizando algunas acciones a la vez, es absolutamente nada. Sin miedo!
De esta forma, la tabla está actualizada con los últimos movimientos y no hay necesidad de guardar nada en client_disconnect (mas que su fecha de desconexión quizás).
Responder
#38
(30/01/2017, 12:42 AM)Sugisaki escribió: en el tema del delay lo tengo arreglado con un bool pero el detalles es que aveces cuando le da el ataque a la base de datos el modulo manda una consulta nula
probe entre el modulo oficial y este y el unico detalle es ese

gracias por sus respuesta

Habrá algún problema de conexión o de codeo del plugin que haga llegar consultas vacías, es demasiado raro. No creo que Destro haya dejado sin querer algún bug de esos. Oh god why
Believe, be yourself and don't hold on to just one dream ❤

https://github.com/FEDERICOMB96
Responder
#39
(30/01/2017, 12:51 AM)LuKks escribió: Recomiendo, guardar los datos en el momento en el que cambian. Por ejemplo, guardas los frags y muertes de cada jugador? pues, apenas muera actualizarlo en la base de datos, lo mismo cada vez que mate a alguien para los frags.
Suena "pesado" pero en realidad no es nada. Son 32 jugadores máximo realizando algunas acciones a la vez, es absolutamente nada. Sin miedo!
De esta forma, la tabla está actualizada con los últimos movimientos y no hay necesidad de guardar nada en client_disconnect (mas que su fecha de desconexión quizás).

y si tenes un zp por niveles vas a guardar cada vez que gana un ammopack? Thats what she said
Ingeniero agrónomo y desarrollador de Software.

tutoriales-allied
buscas un zp?

"La imitación es la forma más sincera de admiración con la que puede pagar la mediocridad a la grandeza"

Merci Alliedmodders pour m'introduire dans la programmation.
Responder
#40
(30/01/2017, 07:52 AM)roccoxx escribió: y si tenes un zp por niveles vas a guardar cada vez que gana un ammopack? Thats what she said

Yo guardaría cada vez que finalice el combo, si.

Según los resultados que dejó Destro:
test_mysql: 90 consultas en 0.80 segundos
test_mysql2: 90 consultas en 0.65 segundos

Eso sería en promedio 0.0072 segundos por consulta (ya que utilizaríamos g_connection para no cerrar la conexión por obviedad y hasta creo son asíncronas¿?).

Sé que dejé olvidada el plugin de estadísticas que hice pero ahí es una gran muestra de que no hay problema con MySQL.
Responder
#41
(26/01/2017, 02:47 PM)Sugisaki escribió: si lo tengo con client_disconnect pero cuando se cambia de mapa se llama 32 veces (depende de jugadores) client_disconnect y a 1 o 2 players se les reinician/borran los datos y también me sucedió lo del "free handled" y lo quite, crasheaba el servidor al cambiar de mapa
Para mi, seguramente tendras en client_disconnect las cosas asi:
Código PHP:
disconntect(id)
{
g_lvl[id] = g_aps[id] = g_asd..... = 0

Lo único que se me ocurre, es que la consulta se mande con esos datos después de pasar por esta función, entonces te queda todo 0. Ahora si se borra es porque estas metiendo mano negra por algún lugar. Esta es mi humilde opinión, quizás sea imposible pero me suena bastante lógica.

Podrías igual mostrar como guardas y cargas todo...
(19/06/2014, 11:08 PM)01011001 escribió: No tiene niveles infinitos, llega hasta 2147483648 (Y despues hace un integer overflow)

(19/06/2014, 11:08 PM)[R]ak escribió: Mis conocimientos aumentaron un 500% con este post
Responder
#42
Cuando se llama a mysql_query la consulta se realiza de forma asíncrona (probablemente si porque hay una especie de callback obligatoria)? (esto se podría testear haciendo un print luego del mysql_query y otro print en el callback)
Que sucede si el servidor cambia de mapa y aún hay consultas pendientes?

Si mysql_query es asíncrono y al cambiar el mapa las consultas pendientes se siguen ejecutando normalmente, lo que vendría a estar mal es el código de tu sistema no de Destro o MySQL.
En el caso de que las consultas pendientes se cancelen al cambiar el mapa, entonces debes guardar cada vez que el usuario realice una acción que debas actualizar, sea ganar ammopacks como sumar daño en habilidad, o lo que sea.

Si mysql_query es síncrono lo mismo, el código tuyo estaría mal y no el de Destro/MySQL.

No puedo dar una respuesta precisa porque no se las respuestas de las dos primeras preguntas de este comentario pero aún así deje las respuestas sea el caso que sea para el que si sepa y para los que hagan la prueba de los prints).
Responder
#43
Las consultas que quedan pendientes en un cambio, hasta que no termine cada una de las que hay el mapa no cambia. Funciona exactamente igual al módulo original, eso no cambió.
Believe, be yourself and don't hold on to just one dream ❤

https://github.com/FEDERICOMB96
Responder
#44
Entonces se pueden realizar en client_disconnect sin temor a que algo suceda mal, en fin, publica lo esencial del código para que podamos solucionarlo, en lo posible en una publicación aparte ya que no estamos hablando del módulo realmente.
Responder
#45
Haciendo referencia a esto:
https://amxmodx-es.com/Thread-Modulo-MyS...connection

Cual es la referencia entre usar g_Host y g_Connection ?
Es decir, cuando "conviene" usar g_Host al realizar una consulta (mysql_query) y cuando g_Connection al realizar la misma.

PD: No se si es un problema con el módulo pero al liberar los Handlers (g_Host y g_Connection) en plugin_end(); me Crashea el servidor.
Free agent - Vendo plugins, mods o apps del foro IPB (Invision community)
Contactarme vía Discord >>> AtselTV#8202
Responder
#46
(15/02/2017, 03:37 AM)CSAxel escribió: Haciendo referencia a esto:
https://amxmodx-es.com/Thread-Modulo-MyS...connection

Cual es la referencia entre usar g_Host y g_Connection ?
Es decir, cuando "conviene" usar g_Host al realizar una consulta (mysql_query) y cuando g_Connection al realizar la misma.

PD: No se si es un problema con el módulo pero al liberar los Handlers (g_Host y g_Connection) en plugin_end(); me Crashea el servidor.

Usar g_Host crea una conexión a mysql, realiza la consulta y cierra la conexión.
Usar g_Connection comprueba la conexión y realiza la consulta.

Yo utilizaría g_Connection.

En mi plugin de estadísticas no liberaba los Handlers y funcionaba correctamente, quizás no sea necesario, además, en el ejemplo que deja Destro tampoco utiliza plugin_end ni libera nada.
Responder
#47
Es necesario agregar algo al modules.ini para que funcione? en meta list no me aparece el modulo, o hay que borrar el mysql de amxmodx?
Responder
#48
(11/01/2018, 02:47 PM)Juan85 escribió: Es necesario agregar algo al modules.ini para que funcione? en meta list no me aparece el modulo, o hay que borrar el mysql de amxmodx?

Agrega esto a tú lista de modulos.

Cita:mysqlt

Creería que con eso se soluciona. Mariodance
Responder
#49
(11/01/2018, 02:47 PM)Juan85 escribió: Es necesario agregar algo al modules.ini para que funcione? en meta list no me aparece el modulo, o hay que borrar el mysql de amxmodx?

En modules.ini desactiva el modulo (mysql) si lo tenes activado, y lo mismo con el modulo sqlite (hay gente que no sabe y activa los dos pacman). Y abajo de esos dos agrega: mysqlt

Ej:

Código PHP:
;mysql
;sqlite
mysqlt 

Y acordate siempre de poner el modulo en la carpeta "modules", dependiendo si usas linux o windows
Responder
#50
necesito este mudulo <safemenu> alguien me lo puede pasar?Nothingdohere
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)