Hola a todos, tengo una clase llamada Conexion la cual tiene la siguiente funcion:
Código PHP:
Ver original<?php
function conectar()
{
try {
$db =new PDO('mysql:host=localhost;dbname=mi_base_datos', "usuario_bd", "clave_bd");
$db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, TRUE);
return($db);
} catch (PDOException $e) {
print "<p>Error: No puede conectarse con la base de datos.</p>\n";
//print "<p>Error: " . $e->getMessage() . "</p>\n";
}
}
?>
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<?php
Class Auditoria_Concurrente extends Conexion {
public $con ;
public function __construct() {
$this->con = $this->conectar();
}
//funcion donde uso la transaccion
function registro_auditoria_concurrente ($data_pac, $fec_ing, $fec_egr)
{
//aca inicio la transaccion con PDO
try{
$this->conectar()->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->conectar()->beginTransaction();
$this->conectar()->exec("insert into mi_tabla ... "); $this->conectar()->exec("insert into mi_tabla2 ... "); $this->conectar()->commit();
}
}catch (Exception $e) {
$this->conectar()->rollBack();
echo "Error: " . $e->getMessage();
}
//fin de la transaccion
}
}
?>
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<?php
$db =new PDO('mysql:host=localhost;dbname=mi_base_datos', "usuario", "clave");
try{
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->beginTransaction();
$db->exec("insert into mi_tabla ... "); $db->exec("insert into mi_tabla2 ... "); $db->commit();
}
}catch (Exception $e) {
$db->rollBack();
echo "Error: " . $e->getMessage();
}
?>
Agradezco me puedan indicar como usar el $this->conectar() o porque se puede estar presentando este error...Muchas gracias