Ver Mensaje Individual
  #3 (permalink)  
Antiguo 04/10/2010, 12:25
Avatar de neodani
neodani
 
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 8 meses
Puntos: 20
Respuesta: Debería usar un Stored Procedure?

Cita:
Iniciado por gnzsoloyo Ver Mensaje
La respuesta básica es si, te convendría si los parámetros de los inserts no son compartidos.
Pero si las otras dos tablas toman datos que ya están en la primera o son producidos por ella (por ejemplo, el ID si es numérico) es posible que con un TRIGGER sea suficiente.

¿Cuál es el caso? Danos un poquito de detalles respeto de los parámetros y cómo se reparten.
Buenas gnzsoloyo,

La función que inserta en las tres tablas es la siguiente:

Código PHP:
Ver original
  1. public function addNewUser($nombre,$usuario,$password,$correo,$pais,$birthday,$sexo,$userReferido){
  2.        
  3.         $this->_nombre=$nombre;
  4.         $this->_usuario=$usuario;
  5.         $this->_password=$password;
  6.         $this->_correo=$correo;
  7.         $this->_pais=$pais;
  8.         $this->_birthday=$birthday;
  9.         $this->_sexo=$sexo;
  10.         $this->_userReferido=$userReferido;
  11.         $this->_userKey = $this->randomKeygen($length=10);
  12.         $ip=getRealIP();
  13.         $this->_userId=1; /*hardcore */
  14.        
  15.         // Inserta datos en la TBL_USERS
  16.         $query = "INSERT INTO tbl_user (user_login,user_pass,user_activation_key) VALUES (:user_login,:user_pass,:user_activation_key)";
  17.  
  18.         $comando = $this->_con->prepare($query);
  19.         $comando->execute(array(':user_login'=>$this->_usuario,
  20.                                 ':user_pass'=>$this->_password,
  21.                                 ':user_activation_key'=>$this->_userKey));
  22.        
  23.         // Inserta datos en la TBL_USERS_PERSONAL
  24.         $query = "INSERT INTO tbl_user_personal (user_id,user_name,user_mail,user_birthday,user_sexo,user_pais) VALUES (:user_id,:user_name,:user_mail,:user_birthday,:user_sexo,:user_pais)";
  25.         $comando = $this->_con->prepare($query);
  26.         $comando->execute(array(':user_id'=>$this->_userId,
  27.                                 ':user_name'=>$this->_nombre,
  28.                                 ':user_mail'=>$this->_correo,
  29.                                 ':user_birthday'=>$this->_birthday,
  30.                                 ':user_sexo'=>$this->_sexo,
  31.                                 ':user_pais'=>$this->_pais));
  32.        
  33.         // Inserta datos en la TBL_REGISTRO
  34.         $query = "INSERT INTO tbl_registro (user_id,fecha_registro,ip_registro) VALUES (:user_id,now(),:ip)";
  35.         $comando = $this->_con->prepare($query);
  36.        
  37.         $comando->execute(array(':user_id'=>$this->_userId,
  38.                                 ':ip'=>$ip));
  39.        
  40.     }

Primero inserto en la TBL_USERS la cual tiene un campo user_id es autoincremental y PK.
El problema está en las dos siguientes inserciones que dependen del valor del user_id insertado en la TBL_USERS para luego en las otras dos tablas poder ingresarlo (de ahí la relación de FK).
En el ejemplo lo he puesto "hardcore" este valor (linea 13).

Te pego el diseño de las tablas para que lo veas mas claro.
Aprovecho para preguntarte si las dos claves foráneas de las tablas USER_PERSONAL y REGISTRO, deberían ser también primarias?...



Muchas gracias de antemano!