Ver Mensaje Individual
  #3 (permalink)  
Antiguo 20/05/2010, 00:51
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

Muchas gracias Quim,

he implementado un código similar al que me has enviado y, ahora mismo, sólo tengo una duda.

Yo utilizo una clase para el tema de la conexión y manejo con la base de datos. Tengo una función para la conexión y varias funciones para realizar todo tipo de consultas, (Selects, Inserts, Updates, etc).

Te adjunto, únicamente la función que utilizo para el insert.

<?

class CBaseDatos{
var $ConexionActiva;
var $BaseDeDatos;

//Constructor
function CBaseDatos($host,$user,$pass,$datab){
$this->ConexionActiva=@mysql_connect($host,$user,$pass );
$this->BaseDeDatos=@mysql_select_db($datab);
}

//Consultas sin resultados (INSERT,DELETE...)
function qryNoRes($consulta){
$Haz=@mysql_query($consulta,$this->ConexionActiva);
}

}//fin de clase

?>


Bien, esta clase funciona perfectamente y realiza el Insert bien.

Yo creo una instancia de esta clase y la utilizo para operar con la base de datos:

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

Ahora bien, ¿Cómo utilizo la instancia $Data para indicarle el BEGIN, el ROLLBACK y el COMMIT?
Mi duda es implementar un código que funcione EXACTAMENTE igual que esto:

mysql_query("BEGIN");
mysql_query("ROLLBACK");
mysql_query("COMMIT");


pero con la instancia $Data de mi clase

¿Tengo que crear una función nueva?
¿Algo así?

function transaccion ($punto) {
mysql_query($punto);
}


$Data->transaccion("BEGIN");

$resultado_insert = $Data->qryNoRes($INSERT1);
if (!$resultado_insert) $exito_insert=1;

$resultado_insert = $Data->qryNoRes($INSERT2);
if (!$resultado_insert) $exito_insert=1;

if ($exito_insert == 1) {
$Data->transaccion("ROLLBACK");
}else $Data->transaccion("COMMIT");


Mi duda sería si esta forma de usar la instancia Data de mi clase con la función creada sería correcta para utilizar BEGIN, ROLLBACK y COMMIT.

Un saludo.