
Pagina php se cuelga al hacer consulta con transacciones mysqli
Publicado por Marco (7 intervenciones) el 20/12/2022 23:17:08
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 paginas 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:
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.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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;
}
Gracias por la ayuda que me puedan brindar.
Valora esta pregunta


0