2010-03-05 15 views
5

Conosco bene SQL, ma qui mi manca qualcosa di veramente stupido. Questa query di aggiornamento continua a generare un errore. La query è:Perché questa query SQL UPDATE non funziona?

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

La tabella ha sicuramente una colonna per ordine, e ha un record con l'ID di 19. La colonna ordine non è univoco.

L'errore che ottengo è il generico uno:

#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 

Ho ordine racchiuso tra virgolette perché ORDER è una parola SQL riservata. Cosa mi manca?

+1

Se questo è un tavolo che non è ancora andato in produzione, ti suggerisco di cambiare il nome depositato a qualcosa che willnot bisogno di essere sfuggito. Ciò consentirà di risparmiare un sacco di tempo di manutenzione in quanto le persone si dimenticheranno di farlo e quindi si chiederanno cosa c'è che non va. In futuro, non utilizzare una parola riservata per il nome di un campo. – HLGEM

risposta

7

Se si utilizza MySQL la query dovrebbe essere simile a questo:

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

Solo i backtick hanno funzionato, ma sono necessari solo attorno alla parola riservata, l'ordine. Quindi è UPDATE pagine SET 'order' = 1 WHERE id = 19 LIMIT 1. Ero sicuro che le parentesi quadre avrebbero funzionato, devo cercare perché non lo facevano. – rhodesjason

+0

Si noti che non è necessario sfuggire a ogni parola (come mostrato nell'esempio). Solo "ordine". – Timothy

+0

Sì, non devi sfuggire a ogni parola. Ma per capire meglio (e penso che sia una buona pratica) sfuggire al tavolo e ai nomi delle righe. [modifica] Ecco una lista di parole riservate di mysql: http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html – Tobias

3

Sembra un messaggio di errore MySQL. MySQL non usa backtick (`) per l'escape?

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

Nevemind MySQL

+0

Dice "MySQL" nel messaggio di errore. :-) – Ken

+0

È interessante notare che non ha funzionato neanche. Anche se ho immediatamente riconosciuto quello che stavi dicendo ed ero sicuro che fosse così. – rhodesjason

1

non usare le virgolette, utilizzare [ordine] (o qualunque sia la versione SQL utilizza per fuggire). Con le virgolette normali è visto come una stringa letterale, che non è permesso qui.

0

è necessario rimuovere la singola citazione dalla specifica nome di colonna nella query

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

Questo non funzionerà. L'ORDINE è una parola riservata, quindi deve essere preceduta dall'esclusione (che è specifica per il database) – Timothy

0

order è una parola riservata utilizzata in ORDER BY.

Utilizzare backtick (`) (come ha detto Ken).

0

La risposta più semplice è;

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

Questo dovrebbe fare il trucco.

0

Penso che la query dovrebbe essere;

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