2010-03-05 24 views
5

Conozco bien SQL pero me falta algo muy tonto aquí. Esta consulta de actualización sigue arrojando un error. La consulta es:¿Por qué no funciona esta consulta SQL ACTUALIZAR?

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

la mesa sin duda tiene una columna para la orden, y tiene un registro con el ID de la columna 19. El orden no es única.

El error que consigo es la genérica 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 

He incluido orden entre comillas porque ORDER es una palabra reservada de SQL. ¿Qué me estoy perdiendo?

+1

Si esta es una tabla que aún no se ha iniciado, le sugiero que cambie el nombre archivado a algo que no necesite ser escapado. Esto ahorrará mucho tiempo de mantenimiento ya que las personas se olvidarán de hacerlo y luego se preguntarán qué pasa. En el futuro, no use una palabra reservada para un nombre de campo. – HLGEM

Respuesta

7

Si se utiliza MySQL la consulta debería tener este aspecto:

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

Solo backticks funcionó, pero solo los necesita alrededor de la palabra reservada, orden. Así que son las páginas de ACTUALIZACIÓN SET 'order' = 1 WHERE id = 19 LIMIT 1. Estaba seguro de que los corchetes habrían funcionado, tengo que ver por qué no lo hicieron. – rhodesjason

+0

Tenga en cuenta que no tiene que escaparse de cada palabra (como se muestra en el ejemplo). Solo 'orden'. – Timothy

+0

Sí, no tiene que escapar de cada palabra. Pero para una mejor comprensión (y creo que es una buena práctica) para escapar de la tabla y los nombres de las filas. [editar] Aquí hay una lista de palabras reservadas foy mysql: http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html – Tobias

3

Parece un mensaje de error de MySQL. ¿MySQL no usa backticks (`) para escapar?

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

Nevemind MySQL

+0

Dice "MySQL" a la derecha en el mensaje de error. :-) – Ken

+0

Curiosamente, eso tampoco funcionó. Aunque inmediatamente reconocí lo que estaba diciendo y estaba seguro de que era eso. – rhodesjason

1

no utilice comillas, usar [Orden] (o cualquiera que sea su versión de SQL utiliza para escapar). Con las comillas regulares se ve como una cadena literal, que no está permitida aquí.

0

Es necesario eliminar la comilla simple de la especificación de nombre de la columna en la consulta

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

Esto no funcionará. ORDER es una palabra reservada, por lo que debe ser escapada (que es específica de la base de datos) – Timothy

0

order es una palabra reservada utilizada en ORDER BY.

Use los palos atrás (`) (como dijo Ken).

0

La respuesta más simple es;

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

Eso debería hacer el truco.

0

Creo que la consulta debería ser;

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