Contacto | #php_para_torpes | Enlázanos | ¿Quiénes somos?
22 usuarios Online (0)
Darse de alta en la web | Recuperar password   
Inicio / Foros / MySQL / Problemas al hacer rollback
1 respuestas recibidas | 67 visitas | Categoría MySQL

Problemas al hacer rollback

Avatar de Master04
Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1 Nivel 1

(Nivel 1 - 1 posts)

#0 Offline Master04 Usuario 25 abr 08 (16:59)  
Hola,
estoy realizando una base de datos con mysql (tablas InnoDb) y utilizo ADODB. El problema lo tengo al realizar el control de transacciones, es como si estuviera utilizando un sistema no transaccional y entonces no se restauran las transacciones.
En el caso siguiente el rollback no se realiza, con lo cual se inserta el valor en la tabla. He probado con BeginTrans y StartTrans, pero el resultado es el mismo, no funciona.

<?php
include("conectarADO.php");
include("adodb/adodb.inc.php");

$usuari=$_POST['user'];
echo "user: $usuari";

$db = conectar();
//$db->StartTrans();
$db->BeginTrans();
$insert = "INSERT INTO prueba VALUES ($usuari)";
$tran3=$db->Execute($insert);
//$res=$db->CompleteTrans(false);
$res=$db->RollbackTrans();

if($res) {
echo "TRUE";
}
else {
echo "FALSE";
}


?>

En la interficie de phpMyAdmin he introducido el codigo mysql para comprovar que la tabla permite el control de transacciones y si que funciona. Por tanto el problema que tengo es con el uso de ADODB, pero no consigo encontrar los motivos por los que falla.
El motor de almacenamiento predeterminado en el servidor es MyISAM ,que no soporta transacciones, aunque no creo que haya ningun problema con eso a la hora de hacer la conexion, pero es que no se me ocurre nada más.
A ver si alguien me puede ayudar porque no consigo encontrar que puede estar pasando.
Gracias!

Re: Problemas al hacer rollback

Avatar de krowork
Nivel 3 Nivel 3 Nivel 3 Nivel 3 Nivel 3 Nivel 3 Nivel 3

(Nivel 3 - 199 posts)

#1 Offline krowork Usuario 25 abr 08 (17:30)  
Hola Master04,

No conozco la librería por lo tanto no se si adodb lo hará pero en MySQL para poder trabajar con transacciones tienes que enviar una query con "SET AUTOCOMMIT=0". Prueba a enviarlo tú mismo $db->Execute("SET AUTOCOMMIT=0") antes del insert.

Un saludo

//EDITADO

He estado viendo la documentacion de adodb Docs For Class DB_ado y dispone de un método autoCommit que establece este valor. En la documentación no está muy claro cual es el valor por defecto así que te recomiendo que llames siempre a ese método, pasándole false:

Código PHP


<?php
$db
->autoCommit(false);
?>

http://krowork.blogspot.com

Responder mensaje

Para poder participar debes estar registrado e identificado. Si no estás registrado como usuario de PHP-Hispano, :: Registrar ::
Login / Password   

Web alojada en Zilos

php-hispano.net 2002 - 2008 | XHTML 1.0
Datos Legales | Webmaster