El asunto es que estoy haciendo unas aplicaciones pagos con mis clientes los cuales son los principales interesados por nuestra forma de negocios claro está el método de pago es por transferencia bancarias ellos usaría mi aplicación para pagar ciertos servicios que ofrezco pero también yo les transferiría a ellos dinero como ellos a mi
Entonces estoy haciendo las consultas necesarias para crear una solicitud de retiro que se guardara en mi tabla solicitudes como a su vez se le descuenta del saldo disponible el monto a retirar y se actualiza la el campo que guarda el saldo claro está en caso de que se cánsele la solicitud el dinero de monto de retiro se les volverá a sumar en su saldo disponible
No sabía nada de consultas para tablas con motores transaccionales ni de commit ni rollBack asi que quiero dejar mi código para que Ud. me den consejos o mejoras ya que esta face debe se súper segura a prueba de fallas para evitar la redundancia de datos o que me llegue un cliente molesto porque x algún problema de conexión no le devolvió su dinero cosa que según entiendo con autocommit(false); aria de varias consulta una sola y se efectuaría los cambios siempre y cuando todas las consultas se llevaron acabo
Código PHP:
Ver original
// transacion de retiro public function retiro_fondos($cajero, $cliente, $monto) { //escapamos variables de entrada $cajero = $this->con->real_escape_string($cajero); $cliente = $this->con->real_escape_string($cliente); $monto = $this->con->real_escape_string($monto); //sacamos el monto disponible del usuario y id $saldos = $this->sal_user_id(); $saldo = $this->saldo_user['saldo']; $id_cliente = $this->saldo_user['id']; //Armamos $movi movimiento que se guarda en la tabla de movimientos de usuarios //restamos de saldo el monto de retiro $disponible = $saldo - $monto; //verificamos que el monto a retirar no sea mayor a monto disponible if ($disponible >= "0") { //extraemos los datos del banco del cliente $bancos = $this->banco_user(); //datos del banco del cliente gradado con arreglo en tabla solicitudes $datos = $this->saldo_user['non'] . '|' . $this->banco['nombre'] . '|' . $this->banco['cuenta'] . '|' . $this->banco['cedula'] . '|' . $this->banco['tipo']; //definimos la hora y fecha //Guardamos valores en tabla transicional try { $this->con->autocommit(false); //guarda la solicitud al cajero $solicitud = $this->con->prepare("INSERT INTO cajeros_solicitud(id_cajero,id_user,transaccion,monto,datos,proceso,fecha) VALUES (AES_ENCRYPT( ? ,'$this->code'), AES_ENCRYPT( ? ,'$this->code'), AES_ENCRYPT( '1' ,'$this->code'), AES_ENCRYPT( ? ,'$this->code'),AES_ENCRYPT( ? ,'$this->code'), AES_ENCRYPT( '0' ,'$this->code'),? )"); $solicitud->bind_param("iisss", $cajero, $id_cliente, $monto, $datos, $fecha); $solicitud->execute(); //actualiza el saldo disponible del cajero $saldo_update = $this->con->prepare("UPDATE user_segure SET token=AES_ENCRYPT( ? ,'$this->code') WHERE AES_DECRYPT(id_user,'$this->code') = ?"); $saldo_update->bind_param("is", $disponible, $id_cliente); $saldo_update->execute(); //guarda registro del movimiento solicirud de retiro $movimientos = $this->Movimientos_insert('0', $movi, $id_cliente); echo "correcto"; $this->con->commit(); } catch (Exception $e) { echo ERROR_DIE; $this->con->rollBack(); } //else muestra mensaje si el monto a retirar es mayor al saldo disponible } else { echo DIV_OPEN_WAR . '' . STRONG_ATENCION . ' Monto A Retirar: ' . number_format($monto) . ' ' . MONEDA . ' Supera Su Saldo Disponible: ' . number_format($saldo) . ' ' . MONEDA . '' . DIV_CLOSE2; } }