Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: Cioouw en 25 Abril 2010, 21:48 pm



Título: Evitar mostrar errores en mysql y en vez mostrar mensaje personalizado
Publicado por: Cioouw en 25 Abril 2010, 21:48 pm
Hola .. pues tengo una duda que me anda rompiendo el coco.

Tengo un procedimiento que inserta datos en una tabla de 2 campos, el primero campo es idpermiso y el segundo es idusuario (unique), desde un procedimiento se insertan datos en la tabla.

el procedimiento es el mismo:

create procedure sp_inserta(id_usuario varchar(100))
begin
insert into permiso (idusuario) values (id_usuario);
end if //

Pues todo funciona siempre y cuando el id_usuario que se envie sea realmente 'unico' .. pero el problema viene cuando envio uno que ya existe. El procedimiento arroja un error. Hay alguna forma de evitar que muestre el error y que muestre un mensaje personalizado, algo asi como "registro no ingresado".

Gracias.


Título: Re: Evitar mostrar errores en mysql y en vez mostrar mensaje personalizado
Publicado por: Shell Root en 25 Abril 2010, 22:03 pm
Depronto, podría servirté algo así: Verificas el error que se producé y despues lo personaliza de la siguiente manera.
Código
  1. CREATE PROCEDURE sp_inserta(id_usuario VARCHAR(100))
  2. BEGIN
  3.   INSERT INTO permiso (idusuario) VALUES (id_usuario);
  4.   IF @@ERROR = 12
  5.      PRINT 'Error Personalizado'
  6. END

PD: Creo que era así. Lo codee de memoria... Revizalo!


Título: Re: Evitar mostrar errores en mysql y en vez mostrar mensaje personalizado
Publicado por: ^Tifa^ en 26 Abril 2010, 01:43 am
Te recomiendo que investigues como se manejan los HANDLER en MySQL para captar las Excepciones. A lo mejor esto te puede ayudar:

Código
  1.  
  2. CREATE PROCEDURE sp_inserta(id_usuario CHAR(20))
  3. BEGIN
  4. DECLARE continue handler FOR sqlstate '23000' SET @x = 1;
  5. INSERT INTO ejemplo VALUES(id_usuario);
  6. IF @x = 1 THEN SELECT concat('Error llave duplicada');
  7. END IF;
  8. END;
  9. //
  10.  
  11.  


Título: Re: Evitar mostrar errores en mysql y en vez mostrar mensaje personalizado
Publicado por: Cioouw en 26 Abril 2010, 16:25 pm
Gracias, por lo menos con eso del handler se puede especificar el error en concreto, pero que pasaria si yo no quiera saber el error especifico sino solo saber si el registro se inserto o no ¿?

Edito: SOlucionado.
Citar
declare continue handler for sqlwarning set @x=1;

Gracias.