Ver Mensaje Individual
  #4 (permalink)  
Antiguo 20/10/2010, 20:56
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ¿Que hay de malo en este UPDATE?

En realidad es un problema simple y recurrente. La mayoría de los programadores se olvida de él en algún momento cuando están manipulando un lenguaje embebido en otro: Tienes que tener cuidado de no estar usando palabras reservadas en el que estás embebiendo (SQL en este caso).

Así como no puedes usar echo, printf, if, then, new, and u or como nombres de objetos de algún tipo de PHP o C, tampoco puedes usar en el SQL ciertas palabras en el SQL porque esas palabras son sentencias, comandos u objetos de la base de datos, y el parser tomará su uso como un error de sintaxis.

Es el caso típico de que no puedes crear una tabla que se llame "TABLE"... En este, el problema es con la palabra CURSOR. Un cursor es un objeto que permite leer el resultado de una sentencia SELECT registro por registro, a través de ciclos iterativos. Como tal, se trata de un objeto de base de datos y no se puede usar fuera de ese contexto.

Aún así, el SQL te puede permitir usar estos nombres, pero sólo si van encerrados entre acentos inversos (`). Este símbolo le indica al parser que lo que está encerrado es una denominación de un objeto y no debe ser interpretado de otra forma.

Código MySQL:
Ver original
  1.   nombredelabase.nombredelatabla
  2.   SET `background_type` = '".$background_type."',
  3.   `v_background_type` = '".$yes."',
  4.   `v_background` = 'no',
  5.   `v_cursor` = '".$yes."',
  6.   `cursor` = '".$cursor."',
  7.   `v_font` = '".$yes."',
  8.   `font` = '".$font."',
  9.   `v_font_color` = '".$yes."',
  10.   `font_color` = '".$font_color."',
  11.   `v_my_page` = '".$yes."',
  12.   `my_page` = '".$my_page."',
  13.   `show_clock` = '".$show_clock."',
  14.   `show_my_page` = '".$show_my_page."'
  15. WHERE users.username = '".$user."';
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)