Ver Mensaje Individual
  #1 (permalink)  
Antiguo 28/12/2013, 08:12
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 7 meses
Puntos: 320
Inducir la falla de un trigger. (Si se puede devolver un error mejor)

Hola gente que tal? invoco vuestro conocimiento, estoy haciendo un experimento, quiero usar mysql para validad datos mediante los trigger.
Explico, planteo el problema y pongo el codigo que tengo.

Explicacion: Tengo 3 tablas, usuarios, muros, mensajes.
usuarios:
id_usuario | id_muro | otros_campos
mensajes:
id_mensaje | id_usuario | id_muro | otros_campos
muros:
id_muro | otros_campos

un usuario, puede ir conectandose a diferentes muros, salir de uno, entrar en otro o no estar en ninguno, cuando lo hace voy actualizando el id_muro del usuario para saber en que muro esta actualmente.

el usuario solo puede enviar mensajes al muro que esta actualmente conectado, es decir que si intenta mandar un mensaje a un muro y no esta conectado no deberia poder.

Problema:
Tengo un trigger before insert en la tabla mensajes, lo que quiero hacer es validar dentro del trigger si el tipo esta habilitado y sino, hacer explotar la consulta.
Logre que explote haciendo uso de un "bug" de mysql pero si en el futuro lo arreglan esta tecnica va a dejar de funcar, por lo que quiero algo que sea para esto si es que lo hay.

Codigo del trigger before insert de mensajes:

Código MySQL:
Ver original
  1. DECLARE muro_actual INT;
  2. SELECT id_mural INTO muro_actual FROM usuarios WHERE id_usuario = NEW.id_usuario;
  3.    IF(NEW.id_mural != id_mural) THEN
  4.         -- Con este set el trigger exlota al no ocurrir la validacion.
  5.         -- no se porque mysql permite poner el nombre de una variable no declarada
  6.         -- supongo que es algun bug del parsing o algo
  7.         -- pero aca me gustaria hacer explotar la consulta
  8.     SET NEW.id_mural = variable_salvaje_aparece;
  9.    END IF;

Seria genial poder devolver algun codigo de error personalizado o algun texto mezclado con el error de mysql que despues pueda parsear o algo asi como para saber porque fallo, si es por la validacion o por otro error en los datos
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios