Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] que hago cuando lo que inserto es una palabra reservada?

Estas en el tema de que hago cuando lo que inserto es una palabra reservada? en el foro de Mysql en Foros del Web. Pues si, tengo un UPDATE por alli que actualiza segun las palabras que vaya ingresando, pero todo se hecha a perder si ingreso una palabra ...
  #1 (permalink)  
Antiguo 15/06/2013, 20:59
 
Fecha de Ingreso: mayo-2013
Mensajes: 35
Antigüedad: 10 años, 11 meses
Puntos: 0
que hago cuando lo que inserto es una palabra reservada?

Pues si, tengo un UPDATE por alli que actualiza segun las palabras que vaya ingresando, pero todo se hecha a perder si ingreso una palabra como Day, el codigo me llega hasta alli...
Código MySQL:
Ver original
  1. update trend set tglobal='$list[$i]'
  2.               where rank=$rank[$i]

bien $list[$i] es una variable, todo bien hasta que esa variable por casualidad sea igual a una palabra reservada de sql, caso Day..... que es una palabra comun pero reservada... entonces que hago para que mysqli_query no tome en cuenta esto y grabe esa palabra en el registro?

Última edición por gnzsoloyo; 16/06/2013 a las 06:23 Razón: codigo de programacion no permitidoen foros de BBDD
  #2 (permalink)  
Antiguo 17/06/2013, 07:40
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: que hago cuando lo que inserto es una palabra reservada?

Hola fakieboris:

La consulta no tiene nada de raro, es decir, al colocar el valor entre comillas simples (') estás indicando que se trata de una cadena, por lo tanto, si tu campo es de tipo CARACTER, entonces de debería permitir actualizar el registro, independientemente de que se trate o no de una palabra reservada, checa este script:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE tabla (id INT, campo VARCHAR(20));
  2. Query OK, 0 rows affected (0.06 sec)
  3.  
  4. mysql> INSERT INTO tabla VALUES (1, 'DIA'), (2, 'FECHA'), (3, 'INSERTAR');
  5. Query OK, 3 rows affected (0.05 sec)
  6. Records: 3  Duplicates: 0  Warnings: 0
  7.  
  8. mysql> SELECT * FROM tabla;
  9. +------+----------+
  10. | id   | campo    |
  11. +------+----------+
  12. |    1 | DIA      |
  13. |    2 | FECHA    |
  14. |    3 | INSERTAR |
  15. +------+----------+
  16. 3 rows in set (0.00 sec)
  17.  
  18. mysql> UPDATE tabla SET campo = 'DAY' WHERE id = 1;
  19. Query OK, 1 row affected (0.03 sec)
  20. Rows matched: 1  Changed: 1  Warnings: 0
  21.  
  22. mysql> UPDATE tabla SET campo = 'DATE' WHERE id = 2;
  23. Query OK, 1 row affected (0.03 sec)
  24. Rows matched: 1  Changed: 1  Warnings: 0
  25.  
  26. mysql> UPDATE tabla SET campo = 'INSERT' WHERE id = 3;
  27. Query OK, 1 row affected (0.01 sec)
  28. Rows matched: 1  Changed: 1  Warnings: 0
  29.  
  30. mysql> SELECT * FROM tabla;
  31. +------+--------+
  32. | id   | campo  |
  33. +------+--------+
  34. |    1 | DAY    |
  35. |    2 | DATE   |
  36. |    3 | INSERT |
  37. +------+--------+
  38. 3 rows in set (0.00 sec)

Observa que las tres palabras que actualizo (DAY, DATE, INSERT) son palabras reservadas, pero NO HAY NINGÚN PROBLEMA AL ACTUALIZAR EL REGISTRO.

Verifica qué es exactamente lo que estás tratando de ejecutar, un error típico que tienen nos programadores en PHP es obviar los valores de los parámetros, es posible que alguno de estos venga vacío. Verifica este detalle y si continuas con problemas postea la estructura de tu tabla con

Código MySQL:
Ver original 

Ahora bien, otro problema que si puede presentarse con las palabras reservadas es por ejemplo cuando utilizas estas palabras como NOMBRES DE CAMPOS, en este caso lo que tienes que hacer es manejar estos nombres entre acentos graves (`) es decir, tener algo como esto

Código MySQL:
Ver original
  1. UPDATE tabla SET `update` = 'algo';

Observa que aquí estoy suponiendo tener un campo que se llama UPDATE... lo cual es un problema.

Saludos
Leo.
  #3 (permalink)  
Antiguo 17/06/2013, 09:16
 
Fecha de Ingreso: mayo-2013
Mensajes: 35
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: que hago cuando lo que inserto es una palabra reservada?

SHOW CREATE TABLE trend;

CREATE TABLE `trend` ( `rank` int(11) NOT NULL, `tglobal` varchar(140) NOT NULL, `tvenezuela` varchar(140) NOT NULL, `tcaracas` varchar(140) NOT NULL, `tvalencia` varchar(140) NOT NULL, `tmaracaibo` varchar(140) NOT NULL, `tbarquisimeto` varchar(140) NOT NULL, PRIMARY KEY (`rank`,`tglobal`,`tvenezuela`,`tcaracas`,`tvalenc ia`,`tmaracaibo`,`tbarquisimeto`)) ENGINE=InnoDB DEFAULT CHARSET=latin1

Esta es la estructura
  #4 (permalink)  
Antiguo 17/06/2013, 09:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: que hago cuando lo que inserto es una palabra reservada?

Código MySQL:
Ver original
  1. CREATE TABLE `trend`
  2.     ( `rank` int(11) NOT NULL,
  3.     `tglobal` varchar(140) NOT NULL,
  4.     `tvenezuela` varchar(140) NOT NULL,
  5.     `tcaracas` varchar(140) NOT NULL,
  6.     `tvalencia` varchar(140) NOT NULL,
  7.     `tmaracaibo` varchar(140) NOT NULL,
  8.     `tbarquisimeto` varchar(140) NOT NULL,
  9.     PRIMARY KEY (`rank`,`tglobal`,`tvenezuela`,`tcaracas`,`tvalenc ia`,`tmaracaibo`,`tbarquisimeto`)
  10.     ) ENGINE=InnoDB DEFAULT CHARSET=latin1

¿En serio tienes esta estructura de tabla?
¿Una tabla que sólo sirve para Maracaribo, Venezuela?
Más allá de los problemas que tengas en el contenido de las variables, lo que estás haciendo en el diseño de esa base, francamente...
Creo que necesitas leer un poco de fundamentos de bases de datos antes de ponerte a hacer una sola tabla. Y ni hablar de poner datos...

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 17/06/2013, 09:26
 
Fecha de Ingreso: mayo-2013
Mensajes: 35
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: que hago cuando lo que inserto es una palabra reservada?

Guardo la tendencia mundiales de twitter se actualizan cada 10 minutos, pero por ejemplo ayer una de las tendencias fue "Happy Fathers Day" y todo se tiro tres no me actualizaba, me salia el error de mysql, esperando Day... resulta que cuando la oracion salia de las tendencias todo bien hasta que volvia a ser tendencia, osea entraba el top 10 y otra vez el mysql no actualizaba. Tambien me ha pasado con otras palabras, si en la cadena en algun lugar hay una palabra reservada en cualquier lugar de la cadena pues mi base de datos no se actualiza y me sale error confundiendo esa palabra con una funcion de sql. Los nombres de campo no son problema pero si los valores que dependen y hay muchas etiquetas en ingles que contienen palabras como fue el caso de ayer que contenia una palabra en toda la cadena que es reservada.
  #6 (permalink)  
Antiguo 17/06/2013, 09:32
 
Fecha de Ingreso: mayo-2013
Mensajes: 35
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: que hago cuando lo que inserto es una palabra reservada?

gnzsoloyo estoy dando un ejemplito de todo el modulo que tengo, ni hablar que te voy a colocar alli todo el modelo entidad relacion, solo hice una mera pregunta de sintaxis, lo demas no importa, en ellas guarda las tendencias de cada una de esas ciudades con la REST API de twitter V1.1 que eso ya de por si es un dolor de cabeza, sino metete en las paginas de tendencia para que veas como estan pariendo actualizando el nuevo soft. la persona encargada de hacer el sql me dejo solo en esto y solo hago una pregunta de sintaxis porque si te enseño todo el mapa de la base de datos.....

No entiendo la gente que solo entra a imaginarse las cosas y despotricar a los novatos y lo triste es que son moderadores, gracias de todos modos
  #7 (permalink)  
Antiguo 17/06/2013, 10:00
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: que hago cuando lo que inserto es una palabra reservada?

Cita:
Iniciado por fakieboris Ver Mensaje
Guardo la tendencia mundiales de twitter se actualizan cada 10 minutos, pero por ejemplo ayer una de las tendencias fue "Happy Fathers Day" y todo se tiro tres no me actualizaba, me salia el error de mysql, esperando Day... resulta que cuando la oracion salia de las tendencias todo bien hasta que volvia a ser tendencia, osea entraba el top 10 y otra vez el mysql no actualizaba. Tambien me ha pasado con otras palabras, si en la cadena en algun lugar hay una palabra reservada en cualquier lugar de la cadena pues mi base de datos no se actualiza y me sale error confundiendo esa palabra con una funcion de sql. Los nombres de campo no son problema pero si los valores que dependen y hay muchas etiquetas en ingles que contienen palabras como fue el caso de ayer que contenia una palabra en toda la cadena que es reservada.
Mira, todo esto tiene toda la impresión de ser un problema de programación, en tanto lo que tenga una cadena de texto, que se almacena como cadena de texto y se manipula como tal, no tiene por qué afectar la sintaxis de MySQL.
Sólo puede haber problemas sintácticos en una consulta si los contenidos de las variables se usan sin ser incluidos en una cadena, es decir, sin quedar encerrados entre apóstrofos.
Si el contenido de una cadena de texto incluye palabras reservadas, eso es total y absolutamente irrelevante para el SQL, porque el SQL no evalúa el contenido de las cadenas. Sólo su longitud, cuando es mayor al especificado para la columna a donde se almacena.
Si se producen errores de sintaxis por palabras reservadas contenidas en las cadenas, eso indica que hay errores o en la librería que se usa, o en la construcción de la sentencia si se hace programáticamente, o en la validación de los datos (off-topic de este foro), porque está creando la consulta incorrectamente.
Obviamente, para poder analizar el problema, necesitamos un ejemplo real de lo que te sucede, y no hipotéticos, porque como ya verás, el problema depende del entorno real... y no de la teoría.
En teoría, si el sistema está bien programado, el error que tienes no debería existir..
Yo, personalmente, me inclino a pensar en un error de programación, de la API o de la aplicación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 17/06/2013, 12:00
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: que hago cuando lo que inserto es una palabra reservada?

Hola de nuevo fakieboris:

Revisaste lo que te comenté??? acerca de verificar qué es exactamente lo que estás ejecutando... verificaste qué información tienen tus variables o parámetros???

Ojo con tus comentarios... te recuerdo que aquí nadie tiene la obligación de ayudarte, todos lo hacemos de manera desinteresada y nuestro afán no es imaginarse las cosas y despotricar a los novatos.

gnzsoloyo lo comenta también en su post y yo hice un ejemplo para que vieras que el que tengas una palabra reservada NO ES RAZÓN PARA QUE EL UPDATE TE MARQUE ERROR...

Coincido con él en el hecho de que parece que tienes un modelo de BD erróneo, pero bueno, es posible que no tengas el control sobre dicho modelo y así sean las necesidades de tu proyecto, pero no te tomes la observación como una crítica o como algo personal... al contrario, estoy seguro que la intención de gnzsoloyo siempre ha sido la de ayudar, su reputación, el tiempo que le dedica a este y otros foros y en general sus respuestas avalan su trabajo...

Saludos
Leo.
  #9 (permalink)  
Antiguo 18/06/2013, 02:32
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: que hago cuando lo que inserto es una palabra reservada?

En algún momento del modulo que tienes, estas dividiendo las etiquetas por palabras? Haces estadísticas de las palabras que aparecen en las etiquetas?

Si es asi ahí tienes el problema. Pero como muestras muy poco de lo que tienes es difícil de ayudar.

Estoy con @gnzsoloyo que en la estructura de la tabla que has mostrado se intuyen grabes problemas de diseño.

Por otro lado cuando se pide mas información no es para copiar sino para poderse hacer una composición de lugar y poder ver de donde vienen los problemas. La tabla que has mostrado no da mas información puesto que es igual en términos de tipos de datos que la que @leonardo_josue ha usado para demostrarte que el problema esta en otra parte.

Por lo tanto ya esta bien que no muestres todo tu modelo simplemente debes mostrar las cosas que sean pertinentes para que se te pueda ayudar.

(Un moderador y dos colaboradores... que más quieres)
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #10 (permalink)  
Antiguo 18/06/2013, 11:10
 
Fecha de Ingreso: mayo-2013
Mensajes: 35
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: que hago cuando lo que inserto es una palabra reservada?

Bien, este es el modulo mas sencillo, nada del otro mundo, simplemente obtengo los trending topics del momente de twitter..... lo que hago es guardarlo en una tabla, se actualiza cada de 10 minutos, entonces cuando actualiza esos datos que estan en otra tabla pasan a otra tabla, y luego hace el update de la tabla, es decir, tengo dos tablas uno con los trending recientes y otra con los trending de hace 10 minutos, con esto yo simplemente hago comparaciones para saber quien ha subido de puesto o a bajado, o si sigue en la misma posicion o si acaba de subir al top 10. Aqui esta solo ese modulo:

Última edición por gnzsoloyo; 18/06/2013 a las 12:05 Razón: no links...
  #11 (permalink)  
Antiguo 18/06/2013, 11:16
 
Fecha de Ingreso: mayo-2013
Mensajes: 35
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: que hago cuando lo que inserto es una palabra reservada?

Es la unica forma que se me ocurrio para saber si un trending va en subida o bajando....y creo que es la mejor ya que twitter no me da esa informacion. Mi otro modulo es mas complicado pues trabajo con la streaming API de Twitter pero estoy con lo mio que es PHP y ya es otro tema. Saludos
  #12 (permalink)  
Antiguo 18/06/2013, 12:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: que hago cuando lo que inserto es una palabra reservada?

En el fondo, no terminamos de saber por dónde falla la cosa. Lo que nos dices no nos aclara cómo es que se produce un error en un contexto iumposible.
Si podemos decir de seguro que no es porque una cadena de texto contenga palabras reservadas.

Al final, ¿lo resolviste o no?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 18/06/2013, 12:37
 
Fecha de Ingreso: mayo-2013
Mensajes: 35
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: que hago cuando lo que inserto es una palabra reservada?

Bueno alli esta funcionando, el Domingo una de las etiquetas era "Happy Father's Day" y me salia el error de sintaxys SQL en Day? Where rank=8........ lo cierto es que si pasaba a otro lugar decias error sintax sql...day? where rank=5....... y lo triste es que nunca actualizo mi base de datos y todo ese dia estuve mostrando datos desactualizados porque este error no me actualizaba la base de datos, Ya cuando no aparecio mas esa etiqueta todo se arreglo. Por ello revisando el codigo no habia novedad, inclusive en dos momentos del dia que la etiqueta bajo del top 10, todo se acomodo. Por eso dije pero porque con esa etiqueta? y lo unico que mire distinto fue que contenia la palabra Day.....por lo que me pregunte que debia tener una sintaxys equivocada a la hora de guardar la cadena de caracteres y tomaba la palabra DAY como reservada del SQL. Fue mi unico analisis......del resto nunca ha fallado
  #14 (permalink)  
Antiguo 18/06/2013, 12:41
 
Fecha de Ingreso: mayo-2013
Mensajes: 35
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: que hago cuando lo que inserto es una palabra reservada?

Si lograste entrar al link que habia colocado, ese es modulo exactamente funcionando para que vieras de donde puedo obtener esas flechitas. Saludos
  #15 (permalink)  
Antiguo 18/06/2013, 13:57
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: que hago cuando lo que inserto es una palabra reservada?

Hola de nuevo

Es más probable que el problema se debiera a la comilla simple en Father's y no a la palabra DAY..., depende mucho de cómo haces la consulta... en MySQL, la comilla simple sirve como sabrás, para delimitar cadenas, por lo tanto, si quieres incluir una comilla en una cadena debe "matar" dicha comilla, poniendo dos comillas simples, es decir, algo como esto:

Código MySQL:
Ver original
  1. mysql> select 'Fathet''s day';
  2. +--------------+
  3. | Fathet's day |
  4. +--------------+
  5. | Fathet's day |
  6. +--------------+
  7. 1 row in set (0.00 sec)

Lo mismo pasa con los inserts... si quieres insertar una cadena que contenga comillas en un campo, tendrías que hacerlo así:

Código MySQL:
Ver original
  1. mysql> INSERT INTO tabla VALUES (4, 'Father''s Day');
  2. Query OK, 1 row affected (0.22 sec)
  3.  
  4. mysql> SELECT * FROM tabla;
  5. +------+--------------+
  6. | id   | campo        |
  7. +------+--------------+
  8. |    1 | DAY          |
  9. |    2 | DATE         |
  10. |    3 | INSERT       |
  11. |    4 | Father's Day |
  12. +------+--------------+
  13. 4 rows in set (0.00 sec)

Si lo haces sin poner las dos comillas (no confundir con la comilla doble (")) obtendrías el mensaje de error que mencionas:

Código MySQL:
Ver original
  1. mysql> INSERT INTO tabla VALUES (4, 'Father's Day');    '> ';
  2. ERROR 1064 (42000): 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 's Day
  3. ' at line 1

Ojo con eso.

Saludos
Leo.
  #16 (permalink)  
Antiguo 18/06/2013, 14:38
 
Fecha de Ingreso: mayo-2013
Mensajes: 35
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: que hago cuando lo que inserto es una palabra reservada?

JOOOO muy buena esa leonardo! que grande

Ahora debo pensar como resolver ese asunto, ya que como son trendings y nunca se cuales van a surgir, y muchos vendran con comillas simples (usado mucho por los gringos) seria cuestion de trabajar las cadenas antes de insertarlas, seria concatenando una comilla donde ya exista una en la palabra, un trabajillo de cadenas de caracteres para que no me vuelva a pasar esto, creo que es asi no?

Gracias Leo y alos demas por darle vuelta al asunto
  #17 (permalink)  
Antiguo 18/06/2013, 14:57
 
Fecha de Ingreso: abril-2011
Mensajes: 66
Antigüedad: 13 años
Puntos: 7
Respuesta: que hago cuando lo que inserto es una palabra reservada?

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Mira, todo esto tiene toda la impresión de ser un problema de programación, en tanto lo que tenga una cadena de texto, que se almacena como cadena de texto y se manipula como tal, no tiene por qué afectar la sintaxis de MySQL.
Sólo puede haber problemas sintácticos en una consulta si los contenidos de las variables se usan sin ser incluidos en una cadena, es decir, sin quedar encerrados entre apóstrofos.
Si el contenido de una cadena de texto incluye palabras reservadas, eso es total y absolutamente irrelevante para el SQL, porque el SQL no evalúa el contenido de las cadenas. Sólo su longitud, cuando es mayor al especificado para la columna a donde se almacena.
Si se producen errores de sintaxis por palabras reservadas contenidas en las cadenas, eso indica que hay errores o en la librería que se usa, o en la construcción de la sentencia si se hace programáticamente, o en la validación de los datos (off-topic de este foro), porque está creando la consulta incorrectamente.
Obviamente, para poder analizar el problema, necesitamos un ejemplo real de lo que te sucede, y no hipotéticos, porque como ya verás, el problema depende del entorno real... y no de la teoría.
En teoría, si el sistema está bien programado, el error que tienes no debería existir..
Yo, personalmente, me inclino a pensar en un error de programación, de la API o de la aplicación.
@fakieboris: Hola, me parece que lo que en un comienzo respondio gnzsoloyo, esta en lo correcto, es un error de programacion. Ahora a juzgar por las variables, por como las utilizas; puedo determinar cual es el problema, pero en todo caso la linea de codigo que genera la consulta esta mal escrita.

La consulta esta bien, y la sintaxis de la consulta tambien esta bien, pero es en el como genera esa sintaxis que deberia estar el problema.

Al momento de estar escribiendo esta respuesta, iba a publicar la posible solucion a tu problema, pero la verdad es que este es un foro de MySQL, y no de lenguajes de programacion, por lo cual necesitaria la autorizacion del moderador para poder publicar una posible solucion a tu problema.

Saludos
  #18 (permalink)  
Antiguo 18/06/2013, 15:37
 
Fecha de Ingreso: mayo-2013
Mensajes: 35
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: que hago cuando lo que inserto es una palabra reservada?

Pero porque un error de programacion, todo lo que ocurre es un error de sintaxys de SQL al ingresar una palabra con comilla simple, Leonardo dio en clavo y fue el unico que se digno a dar una respuesta directa al asunto, al saber esto ya realice el codigo PHP para trabajar esa cadena antes de insertarla y resolvi el asunto, cuestion que no pregunte porque se que no es subforo pertinente. El haber determinado exactamente que ocasiona el error de sintaxys en SQL conllevo a que yo buscara la solucion en php. Sin personas que ven el vaso de agua medio lleno no pudiese hacer nada, si me dices cual es el error de programacion? porque en realidad lo que me falto fue tomar en cuenta esa opcion, y ya la programe...... si la fuese programado, y me tira ese problema pues sin duda me hubiese equivocado y seria un error de programacion........... Porque imaginate las etiquetas de twitter, casi aleatorias todos los dias del año, entendi ue debo "pulir" el contenido antes de insertarlo en mi base de datos.
  #19 (permalink)  
Antiguo 18/06/2013, 15:47
 
Fecha de Ingreso: mayo-2013
Mensajes: 35
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: que hago cuando lo que inserto es una palabra reservada?

Cuando ingresamos nombres, apellidos, telefonos, etc en las bases de datos que todos estamos acostumbrados de alguna forma validamos formularios, y estas validaciones nos ayudan a ir acomodando el contenido para luego ingresarlo. En este caso estoy tomando cadenas con todas los tipos de caracteres que existen, que se generan de cualquier forma, los cuales consigo gracias a las REST API de Twitter, una completa caja de Pandora, que con tantas formas de presentarse esa cadena, diganme donde esta el error de programacion........o si me falta programar algo que es muy distinto
  #20 (permalink)  
Antiguo 18/06/2013, 15:53
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: que hago cuando lo que inserto es una palabra reservada?

Ha sido siempre un error de programacion por nunca se deben usar loas contenidos de las variables sin validar que no rompan la sintaxis del SQL.
Al crear una sentencia SQL por programación, debe hacerse siempre cuidando que la consulta resultante quede bien construida para el DBMS.
De haber tenido la precaucion de capturar la consulta tal como la recibe MySQL, este tema se hubiese resuelto inmediatamente. Hasta es posible que no lo hubieses preguntado, porque habría sido evidente incluso para ti.
Cuando se crean sentencias via programación, el 99,9% de los problemas se originan en o que las variables contienen.
Siempre se debe verificar eso primero.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #21 (permalink)  
Antiguo 18/06/2013, 16:02
 
Fecha de Ingreso: mayo-2013
Mensajes: 35
Antigüedad: 10 años, 11 meses
Puntos: 0
Respuesta: que hago cuando lo que inserto es una palabra reservada?

Esta bien tienes razon, pero tu primer comentario estuvo duro y hasta fuera de tono. Sino comparate con la respuestas dadas por leonardo_josue, que sin parar bolas respondio muy bien y no dijo nada como:

"¿Una tabla que sólo sirve para Maracaribo, Venezuela?......"

Hay formas de decir las cosas.
  #22 (permalink)  
Antiguo 18/06/2013, 16:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: que hago cuando lo que inserto es una palabra reservada?

No te extrañes.
Te asombraría ver los ejemplos de tablas que ponen algunas veces.
En ocasiones uno empieza a dudar si es un ejemplo real, o lo están poniendo en broma. O son tan diferentes s lo que realmente tienen, que luego de largos post, cuando nos muestra lo que realmente está usando, nos damos cuenta que nos ha estado llevando por el camino de razonamiento equivocado, y nada de lo que propusimos es aplicable.
En este rubro, a diferencia de otras áreas del desarrollo, la precisión, las descripciones exactas y los planteos detallados son fundamentales. Lo genérico no sirve

Además (como final, y en mi defensa), ¿qué inferirías de una tabla que te describen con estos nombres de campo?:
Código MySQL:
Ver original
  1. CREATE TABLE `trend` (
  2.     `rank` int(11) NOT NULL,
  3.     `tglobal` varchar(140) NOT NULL,
  4.     `tvenezuela` varchar(140) NOT NULL,
  5.     `tcaracas` varchar(140) NOT NULL,
  6.     `tvalencia` varchar(140) NOT NULL,
  7.     `tmaracaibo` varchar(140) NOT NULL,
  8.     `tbarquisimeto` varchar(140) NOT NULL,
  9.     PRIMARY KEY (`rank`,`tglobal`,`tvenezuela`,`tcaracas`,`tvalenc ia`,`tmaracaibo`,`tbarquisimeto`)) ENGINE=InnoDB DEFAULT CHARSET=latin1
¿No te da la impresión de una tabla creada para apenas un país o una región?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 18/06/2013 a las 17:40
  #23 (permalink)  
Antiguo 18/06/2013, 23:02
 
Fecha de Ingreso: abril-2011
Mensajes: 66
Antigüedad: 13 años
Puntos: 7
Respuesta: que hago cuando lo que inserto es una palabra reservada?

Cita:
Iniciado por fakieboris Ver Mensaje
Pero porque un error de programacion, todo lo que ocurre es un error de sintaxys de SQL al ingresar una palabra con comilla simple, Leonardo dio en clavo y fue el unico que se digno a dar una respuesta directa al asunto, al saber esto ya realice el codigo PHP para trabajar esa cadena antes de insertarla y resolvi el asunto, cuestion que no pregunte porque se que no es subforo pertinente. El haber determinado exactamente que ocasiona el error de sintaxys en SQL conllevo a que yo buscara la solucion en php. Sin personas que ven el vaso de agua medio lleno no pudiese hacer nada, si me dices cual es el error de programacion? porque en realidad lo que me falto fue tomar en cuenta esa opcion, y ya la programe...... si la fuese programado, y me tira ese problema pues sin duda me hubiese equivocado y seria un error de programacion........... Porque imaginate las etiquetas de twitter, casi aleatorias todos los dias del año, entendi ue debo "pulir" el contenido antes de insertarlo en mi base de datos.
Mi intencion no fue molestarte o incomodarte fakieboris, si te molesto mi post, te pido disculpas. Ahora con respecto a la solucion, eso, desde mi experiencia y como lo vi escrito, correspondia a un error en cuanto a la programacion en php, porque me imagino que las variables eran arreglos unidimensionales, y por eso señale que era error de programacion, porque una variable de tipo array, no se escribe asi para generar una consulta SQL, se escribe de esta manera que es la mas segura y te da los valores correctos:

Código PHP:
Ver original
  1. $sql = "UPDATE trend SET tglobal='".$list[$i]."'
  2.              WHERE rank='".$rank[$i]."';";

Disculpe gnzsoloyo, pero necesitaba aclarar la forma correcta de como deberia haber sido la linea de codigo que el usuario publico. Me dio muchos dolores de cabeza descubrir que ese tipo de error era debido a eso.

Como te muestro en la linea de codigo, asi deberia haber sido escrita correctamente la linea de codigo, a eso me referia.

Saludos.

Etiquetas: palabra, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:24.