Ver Mensaje Individual
  #1  
Antiguo 20-12-2022
marco3k marco3k is offline
Miembro
 
Registrado: feb 2015
Posts: 61
Reputación: 10
marco3k Va por buen camino
Pagina php se cuelga al hacer consulta con transacciones mysqli

Hola, programo en php puro, uso mysql como db, cuando no usaba transacciones, es decir cuando usaba transacciones automaticas no tenia ese problema y las páginas php iba fluido, pero empece a necesitar actualizar 2 o mas tablas y he notado que en ciertas ocasiones se cuelga la página unos segundos y sale esa pantalla de pagina no encontrada, presionas F5 y se vuelve a restablecer. Debo suponer que mientras estan consultando los datos tambien se estan insertando datos en la tabla y supongo que ahi se genera ese error. Este es un ejemplo del codigo que empleo cuando uso transacciones:
Código PHP:
public function insertar(){
    
$conex $this->ObtenerConexion();
    try{
        
$conex->autocommit(false);
        
$conex->query("STAR TRANSACTION");
        
$sql="INSERT INTO TB_PAGO (REG_ID,PAGO_FECHA,PAGO_ANIO,PAGO_SI,PAGO_CP,PAGO_CHEQUE,PAGO_MONTO,PAGO_OBS,PAGO_SUSPENDIDO,BE_ID) ".
        
" VALUES ('$this->P_REG_ID','$this->P_PAGO_FECHA','$this->P_PAGO_ANIO','$this->P_PAGO_SI','$this->P_PAGO_CP','$this->P_PAGO_CHEQUE','$this->P_PAGO_MONTO','$this->P_PAGO_OBS',0,0)";        
        
$conex->query($sql);
        
$retorno=$this->actualizar_saldo($conex,$this->P_REG_ID);
        
//***

        
$this->P_MENSAJE_ERROR $conex->error;                                    
        if (!empty(
$this->P_MENSAJE_ERROR)) {
            
$error_original GetMensajeErrorx($conex->errno,$conex->error);
            throw new 
Exception($error_original);
        }
        
//***
        
if ($retorno==0) {
            throw new 
Exception('No se pudo consultar los pagos.');
        }                
        if (
$retorno==3) {
            throw new 
Exception('Hay saldo negativo.');
        }        
        
$conex->commit();
        
$this->P_RETORNO 1;
    }catch(
Exception $e){
        
$conex->rollback();
        
$this->P_RETORNO 0;
        if (empty(
$this->P_MENSAJE_ERROR)){
            
$this->P_MENSAJE_ERROR $e->getMessage();
        }
    }
finally{
        
$conex->autocommit(true);
    }
    return 
$this->P_RETORNO;


Estoy seguro que es por las transacciones el problema, entonces que puedo optimizar o que parametro podría cambiar en las transacciones para que no se cuelgue.

Gracias por la ayuda que me puedan brindar.
Responder Con Cita