2010-03-05 16 views
5

Ich kenne SQL gut, aber ich muss etwas wirklich dumm hier fehlen. Diese Aktualisierungsabfrage verursacht weiterhin einen Fehler. Die Abfrage ist:Warum funktioniert diese SQL UPDATE-Abfrage nicht?

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

Die Tabelle auf jeden Fall eine Spalte für Ordnung hat, und es hat einen Rekord mit der ID 19. Die Reihenfolge Spalte nicht eindeutig ist.

Der Fehler ich erhalte, ist die generische ein:

#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 

ich, um in Anführungszeichen gesetzt habe, weil ORDER ein reserviertes SQL Wort. Was vermisse ich?

+1

Wenn dies eine Tabelle ist, die noch nicht in Produktion gegangen ist, schlage ich vor, Sie ändern den Namen des Ordners zu etwas, das nicht maskiert werden muss. Dies wird eine Menge Wartungszeit sparen, da die Leute es vergessen werden und sich dann fragen, was falsch ist. Verwenden Sie in Zukunft kein reserviertes Wort für einen Feldnamen. – HLGEM

Antwort

7

Bei der Verwendung von MySQL die Abfrage wie folgt aussehen entfernen sollte:

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

Nur Backticks funktionierten, aber Sie brauchen sie nur um das reservierte Wort order. Es sind also UPDATE-Seiten SET 'order' = 1 WHERE id = 19 LIMIT 1. Ich war sicher, dass eckige Klammern funktionieren würden, ich muss herausfinden, warum sie das nicht getan haben. – rhodesjason

+0

Beachten Sie, dass Sie nicht jedem Wort entkommen müssen (wie im Beispiel gezeigt). Nur 'bestellen'. – Timothy

+0

Ja, Sie müssen nicht jedem Wort entkommen. Aber zum besseren Verständnis (und ich denke, es ist eine gute Praxis), die Tabelle und Zeile Namen zu entkommen. [Bearbeiten] Hier ist eine Liste der reservierten Wörter foy mysql: http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html – Tobias

3

Das sieht wie eine MySQL-Fehlermeldung aus. Benutzt MySQL nicht Backticks (`) um zu entkommen?

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

Nevemind MySQL

+0

Es sagt "MySQL" direkt in der Fehlermeldung. :-) – Ken

+0

Interessanterweise hat das auch nicht funktioniert. Obwohl ich sofort erkannt habe, was du gesagt hast und war mir sicher, dass es das war. – rhodesjason

1

keine Anführungszeichen verwenden, verwenden Sie [um] (oder was auch immer Ihre SQL-Version verwendet für die Flucht). Mit den regulären Anführungszeichen wird es als String-Literal betrachtet, was hier nicht erlaubt ist.

0

Sie müssen den Apostroph aus dem Spaltennamen-Spezifikation in der Abfrage

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

Dies wird nicht funktionieren. ORDER ist ein reserviertes Wort und muss daher maskiert werden (was datenbankspezifisch ist) – Timothy

0

order ist ein reserviertes Wort in ORDER BY.

Verwenden Sie Backticks (`) (wie Ken sagte).

0

Die einfachste Antwort ist;

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

Das sollte den Trick tun.

0

Ich denke, die Abfrage sollte sein;

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