Foros del Web » Programando para Internet » PHP »

transacciones mysql4 y php

Estas en el tema de transacciones mysql4 y php en el foro de PHP en Foros del Web. Alguien tiene algun codigo para manejar en php las transacciones de mysql4...
  #1 (permalink)  
Antiguo 10/08/2004, 14:36
 
Fecha de Ingreso: noviembre-2003
Mensajes: 15
Antigüedad: 20 años, 5 meses
Puntos: 0
transacciones mysql4 y php

Alguien tiene algun codigo para manejar en php las transacciones de mysql4
  #2 (permalink)  
Antiguo 10/08/2004, 15:28
Avatar de jpogsistem  
Fecha de Ingreso: diciembre-2001
Mensajes: 2.405
Antigüedad: 22 años, 4 meses
Puntos: 4
Que tal, aquí está una buena explicación de transacciones en Mysql:

http://www.programacion.com/bbdd/art...transacciones/

Supongo que para la interacción con php debes profundizar sobre el manejo de las posibles excepciones cuando falle la transaccionalidad.

Saludos.
__________________
EL LIMITE ES EL UNIVERSO
  #3 (permalink)  
Antiguo 10/08/2004, 16:38
Avatar de andinistas  
Fecha de Ingreso: julio-2003
Ubicación: Bogotá COL
Mensajes: 1.000
Antigüedad: 20 años, 9 meses
Puntos: 0
ejemplo

en la pagina anterior dan un ejemplo que se entiende muy fácil

Código PHP:

/*
Este ejemplo se ha probado con MySql 4.0.16 tanto para linux como para windows
Deberéis crear una base de datos llamada "bd_transac"
En esta base de datos cread una tabla con el código

CREATE TABLE `cuentas` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`titular` VARCHAR(100) NOT NULL,
`cantidad_dinero` DECIMAL NOT NULL
);

Cambiad el tipo de la tabla a "INNO DB"

A continuación insertáis dos registros
INSERT INTO cuentas VALUES (1, 'Fco Javier Montesinos', '12000000');
INSERT INTO cuentas VALUES (2, 'María E. Crespo', '200000');

Por último ejecutáis el código en algún servidor apache que tenga instalados los módulos
de php (Yo lo he probado con la versión 4.1.2. sobre Apache 1.3.26 en Debian 3.0 r1 y
funciona perfectamente.

OJO con las mayúsculas en el MYSQL, sobre todo con los nombres de las tablas
*/

class objTransaccion_cuenta{

var 
$erNum = -1// Número interno de error.
var $erStr ""// Descripción del error

var $conx//Conexión con la Base de Datos
var $id;
var 
$cantidadDinero;

// Constructor de clase
// En el constructor se crea la conexión para todo el objeto
function objTransaccion_cuenta() {

// Se conecta con vuestro servidor, con vuestro usuario, y vuestra contraseña
$this->conx mysql_connect("192.168.1.1""root""pwd");
mysql_select_db ("bd_transac"$this->conx);
}


function 
realizarTransaccionToCuenta($prmIdCuentaDestino){
$this->erNum = -1;

// Se inicia la transacción
mysql_query("BEGIN"$this->conx);

$txtSql "update cuentas set cantidad_dinero = cantidad_dinero + " $this->cantidadDinero " where id = " $prmIdCuentaDestino;

@
mysql_query($txtSql$this->conx);
if(
mysql_errno($this->conx) != 0){
$this->erNum 1;
$this->erStr "No se ha podido ingresar el dinero en la cuenta de destino. Error php: " mysql_error($this->conx);
}

// Si no se produjo error continuamos
if($this->erNum == -1){
$txtSql "update cuentas set cantidad_dinero = cantidad_dinero - " $this->cantidadDinero " where id = " $this->id;

@
mysql_query($txtSql$this->conx);
if(
mysql_errno($this->conx) != 0){
$this->erNum 2;
$this->erStr "No se ha podido retirar el dinero en la cuenta de origen. Error php: " mysql_error($this->conx);
}
}

// Si hubo algún error se realiza rollback sobre la transacción
// En caso contrario se finaliza la transacción con commit para aplicar los cambios
if($this->erNum != -1mysql_query("ROLLBACK"$this->conx);
else 
mysql_query("COMMIT"$this->conx);
}

}
// Finaliza la clase


// Aplicación práctica del objeto.
$oC = new objTransaccion_cuenta();
$oC->id 1;
$oC->cantidadDinero 12340;
$oC->realizarTransaccionToCuenta(2);
if(
$oC->erNum != -1){
print 
"Se ha producido un error. " $oC->erStr;
}
else{
print 
"La transacción se ha realizado correctamente";
}
unset(
$oC); 
__________________
Un Saludo, Andinistas.
"Llegaron... Ellos tenían la biblia y nosotros la tierra... y nos dijieron: 'Cierren los ojos y recen.' Cerramos los ojos y cuando los abrimos,
ellos tenían la tierra y nosotros la biblia." Abadío Green.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:46.