Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/07/2011, 11:54
Avatar de jotaincubus
jotaincubus
 
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 19 años
Puntos: 394
Duda PDO y ROLLBACK

Buen día y gracias por leer este tema:

Estuve realizando pruebas con PDO y ROLLBACK, entonces en el bloque TRY hacia una inserción valida a la base de datos y después realizaba una consulta a una tabla que no existe para generar un error... y en el bloque catch tengo el ROLLBACK para ver si funciona. Este es el codigo:

Código PHP:
Ver original
  1. <?php
  2. require_once 'include/cls.trans.DB.php'; // invoco la pagina que conecta a la base de datos
  3. $conexion = DB::getInstance(); //obtengo una instancia de la conexion
  4.  
  5. try{
  6.     $conexion->comenzartransaccion(); //beginTransaction()
  7.    
  8.     // insert que no provoca error
  9.     $array = array(2, 'Belmira', 1);
  10.     $conexion->prepararInsersiones("INSERT INTO tbl_ciudad (id_dpto, ciudad_nombre, ciudad_estado) VALUES (?, ?, ?)"); // prepare
  11.     $conexion->ejecutar($array); // execute
  12.    
  13.     // provocar error
  14.     $array2 = array();
  15.     $conexion->prepararConsultas("SELECT * FROM tbl_prueba"); //prepare
  16.     $conexion->ejecutar($array2); // execute
  17.  
  18.    
  19.     $conexion->commiter(); // commit()
  20.    
  21.     echo "Todo bien...!";
  22.    
  23. }catch(PDOException $e){
  24.     print_r($e);
  25.     $conexion->rollback();
  26.    
  27. }
  28. ?>

Esto funciona bien ya que no inserta en la base de datos pero si comento la segunda transacción si la inserta...

Después me di cuenta que si le quito el ROLLBACK en el bloque CATCH también trabaja bien, y tiene razón ya que el bloque TRY solo se ejecuta por completo si todo esta bien, y al ver el error el la consulta entonces pasa al CATCH y no realiza el INSERT.

Mi pregunta es... Como hago para probar el ROLLBACK ? por que si coloco otro INSERT que provoque error entonces igual se me va a salir por el CATCH sin hacer nada del bloque TRY
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???