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

problema con la sintaxis procedimiento almacenado

Estas en el tema de problema con la sintaxis procedimiento almacenado en el foro de Mysql en Foros del Web. buen dia amigos foristas. Por favor espero que me puedan ayudar, tengo un problema con la sintaxis de una sentencia prepara dentro de un procedimiento ...
  #1 (permalink)  
Antiguo 21/08/2013, 11:37
 
Fecha de Ingreso: abril-2013
Mensajes: 9
Antigüedad: 11 años
Puntos: 0
problema con la sintaxis procedimiento almacenado

buen dia amigos foristas.
Por favor espero que me puedan ayudar, tengo un problema con la sintaxis de una sentencia prepara dentro de un procedimiento almacenado. Aqui le dejo el ejemplo, no se en que me estoy equivocando.
por favor es urgente GRACIAS DE ANTEMANO.

Paso a explicar este procedimiento: es una sentencia que tengo que actualizar tres campo, los cuales les paso por parametro.
cuando ejecuto me sale sintaxis error

Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_ActualizarVigencia`(
  4. IN `tabla` VARCHAR(30) CHARSET utf8,
  5. IN `columna_estado` VARCHAR(30) CHARSET utf8,
  6. IN `columna_codigo` VARCHAR(30) CHARSET utf8,
  7. IN `columna_iglesia` VARCHAR(30) CHARSET utf8,
  8. IN `columna_region` VARCHAR(30) CHARSET utf8,
  9. IN `columna_usuario` VARCHAR(30) CHARSET utf8,
  10. IN `columna_fecha` VARCHAR(30) CHARSET utf8,
  11. IN `var_codigo` INT,
  12. IN `var_iglesia` INT,
  13. IN `var_region` INT,
  14. IN `usu_eliminar`INT,
  15. IN `f_eliminar` TIMESTAMP)
  16.  
  17. set @snt=concat('update ',tabla,' set ',columna_estado,'="No" ,',columna_usuario,'=',usu_eliminar,' , ',columna_fecha,'=',f_eliminar,'  where  ',columna_codigo,'=',var_codigo);
  18.     prepare sent from @snt;
  19.     execute sent;
  20.     DEALLOCATE PREPARE sent;
  21.  

Última edición por gnzsoloyo; 21/08/2013 a las 11:44 Razón: Mal etiquetado. Usar Highlight "MySQL", por favor.
  #2 (permalink)  
Antiguo 21/08/2013, 12:05
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: problema con la sintaxis procedimiento almacenado

Hola nestor_rupay:

Has tratado de ver qué es lo que estás tratando de ejecutar???, hay muchas cosas que pueden estar mal, por ejemplo que te falte alguna coma, que alguno de los parámetros estén llegando como NULL, que alguna palabra esté mal escrita, o inclusive, que alguno de los parámetros que estás enviando contenga una palabra reservada o algún nombre de objeto que no exista en la base de datos...

prueba imprimir el contenido de la variable @snt, el mensaje de error no te dice simplemente que tienes un error de sintaxis, sino que te dice en qué parte o cerca de qué sección está el error.

Por otro lado, lo que estás haciendo es una terrible práctica, te estás exponiendo a que te hagan inyección de código... lee un poco acerca de este tema y cómo evitarle... checa cómo se utiliza la cláusula USING para la definición de parámetros...

Saludos
Leo.
  #3 (permalink)  
Antiguo 21/08/2013, 12:27
 
Fecha de Ingreso: abril-2013
Mensajes: 9
Antigüedad: 11 años
Puntos: 0
Respuesta: problema con la sintaxis procedimiento almacenado

ok amigo leo voy a revisarlo y gracias por la recomendacion
  #4 (permalink)  
Antiguo 21/08/2013, 14:19
 
Fecha de Ingreso: abril-2013
Mensajes: 9
Antigüedad: 11 años
Puntos: 0
Respuesta: problema con la sintaxis procedimiento almacenado

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola nestor_rupay:

Has tratado de ver qué es lo que estás tratando de ejecutar???, hay muchas cosas que pueden estar mal, por ejemplo que te falte alguna coma, que alguno de los parámetros estén llegando como NULL, que alguna palabra esté mal escrita, o inclusive, que alguno de los parámetros que estás enviando contenga una palabra reservada o algún nombre de objeto que no exista en la base de datos...

prueba imprimir el contenido de la variable @snt, el mensaje de error no te dice simplemente que tienes un error de sintaxis, sino que te dice en qué parte o cerca de qué sección está el error.

Por otro lado, lo que estás haciendo es una terrible práctica, te estás exponiendo a que te hagan inyección de código... lee un poco acerca de este tema y cómo evitarle... checa cómo se utiliza la cláusula USING para la definición de parámetros...

Saludos
Leo.
amigo leo
me podrias apoyar con un ejemplo de un procedimiento almacenado para evitar inyección de código.
te lo agradecere.
  #5 (permalink)  
Antiguo 21/08/2013, 14:44
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: problema con la sintaxis procedimiento almacenado

Puede haber un problema con las comillas (no son para poner cadenas de texto), y además con los apóstrofos, ya que las cadenas de texto deben quedar entre ellos, así como las fechas, para las conversiones implícitas.
Prueba:
Código MySQL:
Ver original
  1. DELIMITER $$
  2.  
  3. CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_ActualizarVigencia`(
  4.     IN `tabla` VARCHAR(30) CHARSET utf8,
  5.     IN `columna_estado` VARCHAR(30) CHARSET utf8,
  6.     IN `columna_codigo` VARCHAR(30) CHARSET utf8,
  7.     IN `columna_iglesia` VARCHAR(30) CHARSET utf8,
  8.     IN `columna_region` VARCHAR(30) CHARSET utf8,
  9.     IN `columna_usuario` VARCHAR(30) CHARSET utf8,
  10.     IN `columna_fecha` VARCHAR(30) CHARSET utf8,
  11.     IN `var_codigo` INT,
  12.     IN `var_iglesia` INT,
  13.     IN `var_region` INT,
  14.     IN `usu_eliminar`INT,
  15.     IN `f_eliminar` TIMESTAMP)
  16.     SET @snt=CONCAT('UPDATE ',
  17.                     tabla,' SET ',
  18.                     columna_estado,' = ''NO'' ,',
  19.                     columna_usuario,' = ',
  20.                     usu_eliminar,' , ',
  21.                     columna_fecha,' = ''',
  22.                     f_eliminar,'''  WHERE  ',
  23.                     columna_codigo,' = ',
  24.                     var_codigo);
  25.     prepare sent FROM @snt;
  26.     execute sent;
  27.     DEALLOCATE PREPARE sent;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 22/08/2013, 08:09
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: problema con la sintaxis procedimiento almacenado

Hola nestor_rupay:

Cita:
me podrias apoyar con un ejemplo de un procedimiento almacenado para evitar inyección de código.
te lo agradecere.
En mi post te dí una idea de cómo evitar el SQL inyection, pero creo que no pusiste atención:

Código:
lee un poco acerca de este tema y cómo evitarle... checa cómo se utiliza la cláusula USING para la definición de parámetros...
Si checas esta liga estoy seguro de que encontrarás algo que te pueda servir.

http://lmgtfy.com/?q=evitar+sql+inyection+en+mysql

En realidad hay muchas maneras de hacerlo, y el peligro radica en cómo estás capturando los valores de tus parámetros... este tipo de ataques por lo general se presenta cuando el usuario tiene la posibilidad de enviar estos parámetros con cualquier valor... Observa tu consulta, tienes algo como esto:


Cita:
... WHERE columna_codigo, ' = ', var_codigo);
imagina que el valor de los parámetros sea 1 y 1... por lo tanto tu consulta quedaría así:

Código:
... WHERE 1 = 1
Lo que equivale a decir que actualice TODOS LOS REGISTROS DE TU TABLA . El uso de parámetros en las consultas es un método que te puede ayudar a prevenir estos ataques, pero no es el único.

Tú puedes utilizar tus propias validaciones, por ejemplo para que los parámetros no contengan palabras reservadas, o caracteres especiales como (#, ;, ', ") o simplemente no dejar abiertos los campos para los parámetros y hacerlos mediante combos de selección... es decir, hay mucha tela de donde cortar, ponte a investigar un poco y estoy seguro que encontrarás algo que te sirva,

Con respecto al error, bueno, el compañero gnzsoloyo ya te ayudo con algunos posibles errores, insisto, es cuestión de que evalúes exactamente lo que estás tratando de ejecutar para ver donde está el problema.

Saludos
Leo.

Etiquetas: almacenado, campo, procedimiento, sintaxis, tabla
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 18:33.