THE ORB
Démarrage du studio

Vous avez une erreur dans la syntaxe de votre SQL

Un script a envoyé à la base une requête qu'elle n'a pas pu comprendre.

groupsCette fonctionnalité cesse de marchercodeIl faut un développeur

Faites d'abord ceci

C'est une erreur du script. Signalez-la à son auteur, avec cette ligne.

bug_reportCollez plutôt toute votre console

Ce que ça veut dire

MySQL a rejeté l'instruction. Le message cite le texte à partir de l'endroit où il a abandonné, et c'est la partie la plus utile : quel que soit le fragment cité, le problème est à cet endroit ou juste avant.

Ce qui la provoque

Classé par fréquence : la cause la plus probable en premier.

  1. 1

    De l'interpolation de chaînes au lieu de paramètres

    Construire du SQL avec .. et une valeur contenant une apostrophe. C'est aussi une faille d'injection SQL : cela vaut la peine d'être corrigé pour deux raisons.

  2. 2

    Un mot réservé utilisé comme nom de colonne

    rank, groups, key, order, read. MySQL 8 a ajouté rank aux mots réservés, ce qui a cassé du jour au lendemain beaucoup d'anciens schémas FiveM.

  3. 3

    Une virgule en trop à la fin

    SELECT a, b, FROM users — en général ce qui reste après avoir supprimé une colonne de la liste.

  4. 4

    Le nombre de paramètres ne correspond pas

    Plus de ? que de valeurs, ou un paramètre nommé jamais fourni. Certains pilotes le rapportent comme une erreur de syntaxe plutôt que de liaison.

  5. 5

    Plusieurs instructions dans une seule requête

    oxmysql n'exécute pas deux instructions séparées par ; dans un même appel, sauf si le pilote est configuré pour.

Comment savoir laquelle est la vôtre

Lisez le fragment cité dans l'erreur. Puis affichez le SQL final et exécutez-le à la main dans un client MySQL : s'il échoue de la même façon, c'est l'instruction ; s'il réussit, ce sont les paramètres.

Où regarder

La chaîne de requête dans la ressource, et les valeurs liées.

Comment la corriger

Utilisez toujours des paramètres. Cela règle le problème de syntaxe et celui d'injection en même temps :

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

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

Et encadrez les mots réservés par des accents graves :

SELECT `rank` FROM users WHERE identifier = ?

Toujours bloqué sur votre propre code ?

Cette page explique ce que cette erreur signifie en général. Collez votre console dans Server Fixer : il classera tout ce qui s'y trouve et vous dira quoi faire en premier ; et si vous préférez ne pas y toucher, ORBIE peut réparer le script et vous rendre la ressource prête à déposer.

bug_reportOuvrir le Server Fixer

Pour ce type d'erreur, le Script Optimizer repère les motifs de requête à l'origine de ceci.

Les erreurs qui voyagent avec celle-ci