Ver Mensaje Individual
  #3 (permalink)  
Antiguo 10/08/2004, 16:38
Avatar de andinistas
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.