Ver Mensaje Individual
  #5 (permalink)  
Antiguo 20/05/2010, 03:52
Tarzan
 
Fecha de Ingreso: noviembre-2005
Ubicación: Alicante (España)
Mensajes: 242
Antigüedad: 18 años, 5 meses
Puntos: 1
Respuesta: RollBack de varios Insert

Vale Quim,

pero tengo una última duda ;(

Si resulta que los inserts se realizan correctamente pero el usuario introduce mal la dirección de mail, el mensaje de activación del usuario no se enviará, dejando dos registros en dos tablas incoherentes.
Necesito que, si la dirección no está bien, los inserts se eliminen. Como ROLLBACK de un código php, (así está el envío de mail), no lo puedo hacer, tendré que ejecutar dos DELETES, ¿no?

¿Quedaría bien este código o a alguien se le ocurre una forma más sencilla y óptima?

Function instrucción_segura($punto) {
mysql_query($punto);
}




$Data = new CBaseDatos(st_host,st_user,st_pass,st_db);

$Data-> instrucción_segura ("BEGIN");

$resultado_insert1 = $Data->qryNoRes($INSERT1);
if (!$resultado_insert1) $Data-> instrucción_segura ("ROLLBACK");

$resultado_insert2 = $Data->qryNoRes($INSERT2);
if (!$resultado_insert2) $Data-> instrucción_segura ("ROLLBACK");

// Si los dos se ejecutan correctamente
if ($resultado_insert1) ||($resultado_insert2) {

$Data->instrucción_segura ("COMMIT");
$resultado_mail = Mail->Send();
// Si hay un error al enviar el mail
if (!$resultado_mail) {
// Error al enviar el mail
$Data-> instrucción_segura ("BEGIN");

$resultado_delete1 = $Data->qryNoRes($DELETE1);
if (!$resultado_delete1) $Data-> instrucción_segura ("ROLLBACK");
$resultado_delete2 = $Data->qryNoRes($DELETE2);
if (!$resultado_delete2) $Data-> instrucción_segura ("ROLLBACK");

// Si los dos se ejecutan correctamente
if ($resultado_delete1) ||($resultado_delete2) {
$Data-> instrucción_segura ("COMMIT");
}

}

}