Ver Mensaje Individual
  #10 (permalink)  
Antiguo 11/10/2011, 03:09
Avatar de J_de_Prado
J_de_Prado
 
Fecha de Ingreso: junio-2011
Ubicación: Alpedrete, Madrid,España
Mensajes: 28
Antigüedad: 8 años, 10 meses
Puntos: 2
Respuesta: Provocar un update con dos filas de la misma tabla

Por fin parece que funciona , he utilizado este código, aunque quedan cosas pendientes como cambiar el nombre de las tablas para que no den lugar a confusión, la cosa funciona,

Código MySQL:
Ver original
  1. DROP TRIGGER IF EXISTS `enviados`//
  2. CREATE TRIGGER `enviados` BEFORE INSERT ON `enviados`
  3.  IF
  4.     (SELECT id_user FROM envios WHERE envios.c_mess = NEW.c_mess
  5.     AND id_user = NEW.m_to  AND envios.m_to  = NEW.id_user) IS NOT NULL
  6.  THEN -- del id_user coincidente, ponemos la col 'ok' a '1'          
  7.     UPDATE `base5`.`envios` SET `ok` = 1 WHERE `id_user`= NEW.m_to
  8. AND envios.c_mess = NEW.c_mess AND envios.m_to = NEW.id_user;;
  9.    -- y pasamos los nuevos valores de la nueva fila a la tabla donde quedara.
  10.    INSERT INTO `base5`.`envios` (`id_user`, `c_mess`, `m_to`, `ok`)
  11.     VALUES (NEW.id_user,NEW.c_mess,NEW.m_to, 1);
  12.  ELSE  -- pero si ni ha habido coincidencia pues lo mismo, menos la col `ok`
  13.     INSERT INTO `base5`.`envios` (`id_user`, `c_mess`, `m_to`, `ok`)
  14.     VALUES (NEW.id_user,NEW.c_mess,NEW.m_to, 0);
  15.     -- queda pendiente borrar filas para que no crezca mucho esta tabla,  
  16.    
  17.  END IF;
  18.  
  19. //
Como puedes ver en utilizo la tabla 'enviados' para poder insertar y editar la tabla que me interesa, como te decía parece que funciona bien aunque le faltan cosas como comprobar filas duplicadas y borrar el contenido de la tabla que contiene el trigger (ya se que esto no se puede desde el propio trigger)

Cita:
Respecto a tu "trigger", sigues cayendo en el problema de que quieres invocar valores que no se pueden reconocer porque no son parte de la tabla disparadora del mismo TRIGGER, aunque ahora queda un poco más claro lo que quieres hacer.
Ya veo... y se que al final todo se ejecuta en la memoria, pero tenia la equivocada idea que el una BD todo lo que le pidas, el motor de la BD lo busca.

Cita:
- PHP es un lenguaje del lado del servidor, las operaciones no se realizan en el cliente (como el JavaScript), de modo que realizar ciertas operaciones dentro de un script PHP es bastante más seguro de lo que piensas. Ten en cuenta que para llegar a tus scripts (y a tu ejecución) primero tienen que hackearte el host y la base... con lo que el que capturen el proceso es el menor de tus problemas. A esa altura es probable que ya no te quede ni website, ni base...
- Los SP son mucho más seguros que usar consultas directas, fundamentalmente porque son invulnerables al sql-injection, ya que como sólo pueden recibir parámetros, y los parámetros operan dentro del SP, no pueden incrustar una sentencia ilegal dentro de ellos.
- Por otro lado, los SP permiten hacer un conjunto de operaciones mucho más extensas que simples consultas, lo que los vuelve ideales para procesos más o menos complejos.
- El uso de diferentes usuarios que certifiquen contra el servidor de MySQL es una forma ideal de seguridad por muchas razones, como: 1) El sistema de encriptación de las claves en MySQL no es desencriptable; 2) Permite no recargar conexiones a usuarios y restringir la cantidad de conexiones que un usuario puede hacer; 3) Permite definir una buena granularidad de permisos para los roles de los usuarios, lo que se puede llevar al extremo de que ciertos usuarios sólo puedan acceder a consultas por medio de SP... imagínate.
Este proyecto que estoy intentando poner en marcha se realizo hace varios años en V Basic -Acces aunque no se puso en circulación por la irrupción de la Internet.
Hace unos meses comencé a tratar de ver ma mejor la forma de "ponerlo en la calle" y decidí probar con MYSQL y PHP, comencé leyendo algo de cada tema y me llamo la atención la existencia de programas de pago para disfrazar el código PHP así que pensé en que cuanto menos permisos para los usuarios desde la web tanto mejor. Por por lo que dices la seguridad no es problema. Tengo la intención de que cuando tenga mas o menos la base de datos funcional,que intervengan otras personas y yo mismo creando aplicaciones (android) o con el mismo PHP y en un principio creo facilitara las cosas el que algunas funciones las realice la propia base de datos, y que desde PHP solo se lea o inserte en las tablas, aunque al final termine la cosa como tu apuntas.

¡MUCHAS GRACIAS POR TU PACIENCIA Y CONSEJOS!

Última edición por J_de_Prado; 11/10/2011 a las 03:50