Jump to content
Sign in to follow this  
caanmasu

¡Ya no uses mysql_query!

Recommended Posts

Hola de nuevo
 

Este post es para actualizar tus quest que tengan mysql_query

 

AL GRANO:

 

Si la consulta es un SELECT, cambiar:

 

1.  Ejecutar al consulta

local query = mysql_query()

por

local rows, query = mysql_direct_query()

 

2. Obtener los datos

local variable = query[1][1]

por

local variable = query[1].columna

 

 

EXPLICACIÓN:

 

Si no quieres tener problemas a futuro con tus quest con respecto a buscar en la base de datos, este post es para ti.

Usábamos la función mysql_query para acceder a la base de datos y hacer operaciones. Esa función está en el questlib.lua y utiliza la consola del servidor para ejecutar las consultas. El problema de esto es que depende de la versión de MySQL. Si tienes unos files nuevos con una versión más moderna de MySQL debes ir a cambiar el formato de la función mysql_query. Además no se debería hacer consultas por la consola.

Si en tu quest_functions tienes la función mysql_direct_query te recomiendo usarla ya que trabaja desde el source, ya está integrada y seguro siempre te va a funcionar.

Además que si descargas nuevas quest e intentas hacerlas funcionar y no te funciona alguna de las dos vas a estar confundido, pues acá te estoy dando a entender todo.

mysql_direct_query funciona igual que mysql_query en cuanto a INSERT, DELETE, UPDATE.

Así que si quieres actualizar tu quest poniendo la nueva función, ahí no hay problema.

El problema está en que en SELECT no funciona. ¿Por qué?

Porque retorna dos variables: la cantidad de filas y la tabla

¿Cómo convertir una consulta con SELECT de mysql_query a mysql_direct_query?

Antes:

local query = mysql_query(tu_consulta_con_select)

Ahora:

local rows, query = mysql_direct_query(tu_consulta_con_select)

 

Fíjate que agregué la palabra rows y cambié el nombre de la función.

 

Para obtener el dato debemos usar el formato query[posicion].columna

Por ejemplo, para sacar el oro de un pj debes poner

local gold_pj = query[1].gold

El 1 es porque es la única coincidencia de esa consulta que hiciste. 

 

Ahora si la consulta tiene varias coincidencias (un ranking por ejemplo) debes usar la cantidad de filas así:

for i = 1, rows do

y para acceder al dato, así:

local gold_pj = query[i].gold

 

Eso fue todo. Comenten si creen que hace falta un detalle o si necesitan ayuda me escriben al Discord.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...