1
votes

ER_PARSE_ERROR: Vous avez une erreur dans votre syntaxe SQL; vérifiez le manuel qui correspond à la version de votre serveur MariaDB pour la bonne syntaxe à utiliser

[MySQL] [testeServerClient] An error happens on MySQL for query "INSERT INTO position (id, x, y, z) VALUES (@id, 0, 0, 0)": ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'position (id, x, y, z) VALUES (@id, 0, 0, 0)' at line 1

0 commentaires

3 Réponses :


0
votes

la bonne syntaxe pour utiliser près de 'position (id, x, y, z) VALUES (@id, 0, 0, 0)' à la ligne 1

Il me semble que c'est ne pas passer un ID dans les valeurs . Vous ne devriez pas non plus, si la colonne id est définie sur auto_increment , vous ne devriez même pas l'inclure dans votre insertion.

La syntaxe correcte pour insérer un nouvelle ligne dans une table, si la colonne id a auto_increment activé est:

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);

Sinon, cela semble être un problème autre que votre requête, car il obtient des valeurs 0 0 0 pour les colonnes xyz aucune valeur pour id - il apparaît toujours comme @id qui n'est pas valide puisque la colonne id l'est, j'espère. une colonne INT .


4 commentaires

Salut! Merci pour l'aide! Je ne comprends pas grand-chose aux bases de données, mais j'ai appris que l'ID devrait s'incrémenter automatiquement, cependant, ce n'est pas un ID commun. Il devrait me renvoyer un ID déjà généré, ce qu'il fait, après mes tests, donc celui-ci ne devrait pas s'auto-incrémenter. Dois-je ajouter une autre ligne d'identification qui s'incrémente automatiquement? Voici à quoi ressemble le tableau: imgur.com/a/myByk8F (je ne sais pas comment pour vérifier le code sur le site Web)


@Almeidowski Bonjour. Oui, une bonne pratique consiste à avoir une colonne id de type INT définie comme clé primaire et avec auto_increment activé. Puisque vous utilisez cette colonne d'identifiant actuelle à d'autres fins d'identification, votre requête actuelle est correcte et devrait fonctionner. Le problème demeure que quelle que soit la langue que vous utilisez, il ne récupère pas de valeur d'identifiant réelle pour la colonne d'identifiant actuelle, comme le montre le message d'erreur. Il apparaît toujours comme @id , ce qui, je suppose, est incorrect. Donc, ce n'est pas une question de sql que vous utilisez, mais la façon dont vous transmettez la valeur du paramètre pour la colonne id, il y a une erreur quelque part.


@Almeidowski Cependant, comme je ne suis pas familier / ne reconnais pas le code que vous avez posté (à part le code SQL qui devrait convenir), je ne peux pas vous aider à cet égard.


Ok, donc c'est embarrassant. Apparemment, je n'avais rien pour obtenir l'identifiant du joueur, je l'avais sur un vieux code et je pensais l'avoir aussi sur celui-ci. Le problème est que j'obtiens maintenant la même erreur, mais avec les valeurs correctes. Par exemple: imgur.com/a/QsClpFr



0
votes

position est un mot-clé.

Plan A, mettez des backtics partout.

Plan B: utilisez un nom différent pour la table.

Référence: https://mariadb.com/kb/en/reserved-words/ Je ne le vois pas dans la liste de mots clés de MySQL.

Remarque: quand il dit "près de ...", il pointe presque toujours vers ou immédiatement après le jeton incriminé.


0 commentaires

0
votes

Je pense que le problème est que vous utilisez MySQL.Async.fetchAll pour une requête d'insertion au lieu d'utiliser MySQL.Sync.execute ou MySQL.Async.execute. Essayez d'utiliser MySQL.Sync.execute sauf si vous avez besoin d'un rappel.


0 commentaires