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 nombredelabase.nombredelatabla
SET `background_type` = '".$background_type."', `v_background_type` = '".$yes."',
`v_background` = 'no',
`v_cursor` = '".$yes."',
`cursor` = '".$cursor."',
`v_font` = '".$yes."',
`font` = '".$font."',
`v_font_color` = '".$yes."',
`font_color` = '".$font_color."',
`v_my_page` = '".$yes."',
`my_page` = '".$my_page."',
`show_clock` = '".$show_clock."',
`show_my_page` = '".$show_my_page."'
WHERE users.username
= '".$user."';