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
<?php require_once 'include/cls.trans.DB.php'; // invoco la pagina que conecta a la base de datos $conexion = DB::getInstance(); //obtengo una instancia de la conexion try{ $conexion->comenzartransaccion(); //beginTransaction() // insert que no provoca error $conexion->prepararInsersiones("INSERT INTO tbl_ciudad (id_dpto, ciudad_nombre, ciudad_estado) VALUES (?, ?, ?)"); // prepare $conexion->ejecutar($array); // execute // provocar error $conexion->prepararConsultas("SELECT * FROM tbl_prueba"); //prepare $conexion->ejecutar($array2); // execute $conexion->commiter(); // commit() echo "Todo bien...!"; }catch(PDOException $e){ $conexion->rollback(); } ?>
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