Ver Mensaje Individual
  #3 (permalink)  
Antiguo 28/07/2008, 07:08
lucasarts_18
 
Fecha de Ingreso: enero-2007
Mensajes: 272
Antigüedad: 18 años, 2 meses
Puntos: 5
Respuesta: Control elegante de transacciones

Cita:
Iniciado por GatorV Ver Mensaje
Lo mas facil es que uses PDO, y con eso puedes hacerlo como lo planteas, en caso de un error haces el rollback.

Saludos.
según la ayuda de PDO.

Código PHP:
<?php
try {
  
$dbh = new PDO('odbc:SAMPLE''db2inst1''ibmdb2'
      array(
PDO::ATTR_PERSISTENT => true));
  echo 
"Connected\n";
  
$dbh->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);

  
$dbh->beginTransaction();
  
$dbh->exec("insert into staff (id, first, last) values (23, 'Joe', 'Bloggs')");
  
$dbh->exec("insert into salarychange (id, amount, changedate) 
      values (23, 50000, NOW())"
);
  
$dbh->commit();
  
} catch (
Exception $e) {
  
$dbh->rollBack();
  echo 
"Failed: " $e->getMessage();
}
?>
Este es el comportamiento deseado, pero migrar la aplicación que ya lleva un 60% sería un suicidio, pero lo tendré en cuenta para futuros desarrollos.
Además que creo que PDO será un estandar (en alguna parte lo leí )

Mientras tantos intentaré emitar el compartimiento, quizás haciendo que las funciones que gatillan los procedimientos almacenados en vez de devolver un mensaje de error hagan levantar una excepción y luego capturarlas desde afuera.

Haré el intento....

Si alguien tiene un ejemplo, mejor todavía.

Gracias GatorV-

Saludos.-