2010-03-05 6 views
5

Je connais bien SQL mais il me manque quelque chose de vraiment stupide ici. Cette requête de mise à jour continue de générer une erreur. La requête est:Pourquoi cette requête SQL UPDATE ne fonctionne-t-elle pas?

UPDATE pages SET 'order' = 1 WHERE id = 19 

Le tableau a certainement une colonne de l'ordre, et il a un enregistrement avec l'ID de 19. La colonne de commande n'est pas unique.

L'erreur que je reçois est le générique:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '"order" = 2 WHERE id = 19' at line 1 

J'ai joint l'ordre entre guillemets parce que ORDER est un mot réservé SQL. Qu'est-ce que je rate?

+1

S'il s'agit d'une table qui n'est pas encore passée en production, je vous suggère de remplacer le nom du fichier par quelque chose qui n'aura pas besoin d'être échappé. Cela permettra d'économiser beaucoup de temps de maintenance car les gens vont oublier de le faire et se demander ensuite ce qui ne va pas. À l'avenir, n'utilisez pas de mot réservé pour un nom de champ. – HLGEM

Répondre

7

Si vous utilisez MySQL la requête devrait ressembler à ceci:

UPDATE `pages` SET `order`=1 WHERE `id`=19 
+0

Seuls les backticks ont fonctionné, mais vous en avez seulement besoin autour du mot réservé, order. Donc c'est UPDATE pages SET 'order' = 1 WHERE id = 19 LIMIT 1. J'étais sûr que les crochets auraient travaillé, je dois voir pourquoi ils ne l'ont pas fait. – rhodesjason

+0

Notez que vous n'avez pas besoin d'échapper chaque mot (comme indiqué dans l'exemple). Seulement "commander". – Timothy

+0

Oui, vous n'avez pas à échapper à chaque mot. Mais pour une meilleure compréhension (et je pense que c'est une bonne pratique) pour échapper aux noms des tables et des lignes. [edit] Voici une liste de mots réservés foy mysql: http://dev.mysql.com/doc/refman/5.5/fr/reserved-words.html – Tobias

3

Cela ressemble à un message d'erreur MySQL. MySQL n'utilise-t-il pas de backticks (`) pour s'échapper?

3
UPDATE pages SET [order] = 1 WHERE id = 19 

Nevemind MySQL

+0

Il est dit "MySQL" juste dans le message d'erreur. :-) – Ken

+0

Fait intéressant, cela n'a pas fonctionné non plus. Même si j'ai tout de suite reconnu ce que tu disais et j'étais sûr que c'était ça. – rhodesjason

1

ne pas utiliser des guillemets, utilisez [commande] (ou quel que soit votre version SQL utilise pour échapper). Avec les guillemets réguliers, il est vu comme un littéral de chaîne, ce qui n'est pas autorisé ici.

0

Vous devez retirer la citation unique à partir de la spécification de nom de colonne dans la requête

UPDATE pages SET order = 1 WHERE id = 19 ; 
+1

Cela ne fonctionnera pas. ORDER est un mot réservé, et donc il doit être échappé (qui est spécifique à la base de données) – Timothy

0

order est un mot réservé utilisé dans ORDER BY.

Utiliser les guirlandes (`) (comme l'a dit Ken).

0

La réponse la plus simple est;

UPDATE pages SET pages.order = 1 WHERE id = 19 ; 

Cela devrait faire l'affaire.

0

Je pense que la requête devrait être;

UPDATE pages SET order = '1' 
WHERE id = 19 
Questions connexes