Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/09/2013, 15:18
oscarbt
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Transaccion PDO usando Extend me genera error

Hola a todos, tengo una clase llamada Conexion la cual tiene la siguiente funcion:
Código PHP:
Ver original
  1. <?php
  2.  
  3.  function conectar()
  4.  {
  5.    try {
  6.       $db =new PDO('mysql:host=localhost;dbname=mi_base_datos', "usuario_bd", "clave_bd");
  7.       $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, TRUE);
  8.       return($db);
  9.        } catch (PDOException $e) {
  10.          print "<p>Error: No puede conectarse con la base de datos.</p>\n";
  11.          //print "<p>Error: " . $e->getMessage() . "</p>\n";
  12.         exit();
  13.       }
  14. }
  15. ?>

Ahora tengo una Clase llamada Auditoria_Concurrente, a la cual le hago un Extend con Conexion. En esta misma clase tengo otra funcion para registrar y actualizar en varias tablas y es ahi donde uso la transaccion:

Código PHP:
Ver original
  1. <?php
  2. Class Auditoria_Concurrente extends Conexion  {
  3.    
  4.     public $con ;
  5.     public function __construct()  {
  6.         $this->con = $this->conectar();
  7.     }
  8.     //funcion donde uso la transaccion
  9.      function registro_auditoria_concurrente ($data_pac,  $fec_ing, $fec_egr)
  10.    {
  11.       //aca inicio la transaccion  con PDO
  12.       try{
  13.          $this->conectar()->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  14.          $this->conectar()->beginTransaction();
  15.          $this->conectar()->exec("insert into mi_tabla ... ");
  16.          $this->conectar()->exec("insert into mi_tabla2 ... ");
  17.          $this->conectar()->commit();
  18.        }
  19.        }catch (Exception $e) {
  20.            
  21.               $this->conectar()->rollBack();
  22.               echo "Error: " . $e->getMessage();
  23.            }
  24.      //fin de la transaccion
  25.  
  26.     }
  27.  
  28.  
  29.  
  30.  
  31. }
  32. ?>
El problema es que asi haya un error de insercion en la transaccion, siempre me devuelve verdadero, es decir, aquellos insert a los que le tengo error, no se ejecutan pero todo lo demas si, se supone que la transaccion ejecuta todo o nada.. Pienso Y por eso acudo a este foro, que estoy usando mal la parte :
$this->conectar()

Ya que al hacer al declarar una conexion antes de iniciar la transaccion, ésta me funciona correctamente:

Código PHP:
Ver original
  1. <?php
  2. $db =new PDO('mysql:host=localhost;dbname=mi_base_datos', "usuario", "clave");
  3.  try{
  4.      $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  5.      $db->beginTransaction();
  6.      $db->exec("insert into mi_tabla ... ");
  7.      $db->exec("insert into mi_tabla2 ... ");
  8.      $db->commit();
  9.        }
  10.        }catch (Exception $e) {
  11.            
  12.               $db->rollBack();
  13.               echo "Error: " . $e->getMessage();
  14.        }
  15.  
  16.    
  17.  
  18. ?>

Agradezco me puedan indicar como usar el $this->conectar() o porque se puede estar presentando este error...Muchas gracias