THE ORB
Arrancando el studio

Tenés un error en la sintaxis de tu SQL

Un script le mandó a la base de datos una petición que no pudo entender.

groupsEsa función deja de andarcodeNecesita un desarrollador

Haz esto primero

Es un fallo del script. Repórtaselo a quien lo escribió, con esta línea.

bug_reportMejor pega tu consola entera

Qué significa

MySQL rechazó la sentencia. El mensaje cita el texto a partir del punto donde se dio por vencido, que es la parte más útil de todas: sea lo que sea lo que cita, el problema está ahí o justo antes.

Qué lo provoca

Ordenado por la frecuencia con la que es la respuesta.

  1. 1

    Interpolación de cadenas en vez de parámetros

    Armar SQL con .. y un valor que trae una comilla. Esto además es un agujero de inyección SQL, así que vale la pena arreglarlo por dos motivos.

  2. 2

    Una palabra reservada usada como nombre de columna

    rank, groups, key, order, read. MySQL 8 añadió rank como palabra reservada, y eso rompió de la noche a la mañana un montón de esquemas viejos de FiveM.

  3. 3

    Una coma de más al final

    SELECT a, b, FROM users — normalmente lo que queda después de borrar una columna de la lista.

  4. 4

    La cantidad de marcadores no coincide

    Más ? que valores, o un parámetro con nombre que nunca se pasó. Algunos controladores lo reportan como error de sintaxis en vez de error de enlace.

  5. 5

    Varias sentencias en una sola consulta

    oxmysql no ejecuta dos sentencias separadas por ; en una llamada salvo que el controlador esté configurado para eso.

Cómo saber cuál es el tuyo

Leé el fragmento citado en el error. Después imprimí el SQL final y ejecutalo a mano en un cliente de MySQL: si ahí falla igual, es la sentencia; si funciona, son los parámetros.

Dónde mirar

La cadena de la consulta en el recurso, y los valores que se enlazan.

Cómo arreglarlo

Usá siempre marcadores de posición. Arregla el problema de sintaxis y el de inyección a la vez:

-- mal
MySQL.query('SELECT * FROM users WHERE name = "' .. name .. '"')

-- bien
MySQL.query('SELECT * FROM users WHERE name = ?', { name })

Y poné entre acentos graves las palabras reservadas:

SELECT `rank` FROM users WHERE identifier = ?

¿Sigues atascado en tu propio código?

Esta página es lo que suele significar este error. Pega tu consola en Server Fixer y ordenará todo lo que haya en ella y te dirá qué hacer primero; y si prefieres no tocarlo, ORBIE puede reparar el script y devolverte el recurso listo para soltar.

bug_reportAbrir el Server Fixer

Para este tipo de error, el Script Optimizer detecta los patrones de consulta que causan esto.

Errores que viajan con este