Ver Mensaje Individual
  #10 (permalink)  
Antiguo 29/07/2011, 13:32
Avatar de GatorV
GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Duda PDO y ROLLBACK

Cita:
Iniciado por jotaincubus Ver Mensaje
Acabo de realizar la siguiente prueba...

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();
  7.    
  8.     // insert que no provoca error
  9.     $array = array(2, 'Probando', 1);
  10.     $conexion->prepararInsersiones("INSERT INTO tbl_ciudad (id_dpto, ciudad_nombre, ciudad_estado) VALUES (?, ?, ?)");
  11.     $conexion->ejecutar($array);
  12.    
  13.     // provocar error
  14.     $array2 = array('sapo', 'Otro', 1);
  15.     $conexion->prepararInsersiones("INSERT INTO tbl_ciudad (id_dpto, ciudad_nombre, ciudad_estado) VALUES (?, ?, ?)");
  16.     $conexion->ejecutar($array2);
  17.  
  18.    
  19.     $conexion->commiter();
  20.    
  21.     echo "Todo bien...!";
  22.    
  23. }catch(PDOException $e){
  24.     print_r($e);
  25.     //$conexion->rollback();
  26.    
  27. }
  28. ?>

Como pueden ver el primero esta bien, el segundo NO PORQUE EL PRIMER CAMPO ES INTEGER y le puse 'sapo', y déjenme decirles que NO INSERTO EL PRIMERO TAMPOCO, pero si comento el segundo INSERT si me inserta el primero... entonces mira que si una no se cumple NO HACE NADA DEL BLOQUE TRY.

Error generado:
Incorrect integer value: 'sapo' for column 'id_dpto' at row 1
Verifica que no tengas el AutoCommit en tu MySQL, ya que al hacer el begintransaction, espera una transacción, y al no hacer el commit, aunque no hagas explicitamente el rollback no va a insertar el dato hasta encontrarse con un commit.