elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  PHP y MariaDB problema entre start transaction y commit
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: PHP y MariaDB problema entre start transaction y commit  (Leído 2,739 veces)
Anix

Desconectado Desconectado

Mensajes: 1


Ver Perfil
PHP y MariaDB problema entre start transaction y commit
« en: 12 Junio 2022, 23:04 pm »

RESUELTO: generaba la conexión más de una vez al utilizar ciertas funciones que realizan consultas en la base de datos, quité de ellas la línea que las generaba y ahora paso el enlace como parámetro para siempre utilizar el mismo entre el start transaction y el commit.

Hola, tengo un problema extraño al realizar varias inserciones a distintas tablas entre un START TRANSACTION y un COMMIT.
Cuando un INSERT devuelve error, se detiene la ejecución del código mostrando el error en pantalla y así no tiene lugar el COMMIT pero igualmente quedan registradas todas las inserciones realizadas hasta allí.
De momento la única forma en la que puedo lograr que deshaga los cambios realizados es no ejecutando las funciones de PHP mysqli_errno y mysqli_error.

Resumo mi código para explicarme.

Caso 1: registra todo hasta antes del error

Código
  1. mysqli_query($link,'START TRANSACTION');
  2. for($i=0;$i<$nTotConsultas;$i++){
  3.    mysqli_query($link,$consulta[$i]);
  4.    if( mysqli_errno($link)<>0 ) {
  5.        if( mysqli_errno($link)==1062) {
  6.            mysqli_close($link);
  7.            echo 'Registro existente'; exit();
  8.        }elseif( mysqli_errno($link)==1451) {
  9.            echo 'Hay registros relacionados a este &iacute;tem, imposible eliminar/modificar'; exit();
  10.        }else{
  11.            $numerror = mysqli_errno($link); $descrerror = mysqli_error($link);
  12.            mysqli_close($link);
  13.        }
  14.    }
  15.    if($numerror<>0) {
  16.        echo 'Error N&ordm; '.$numerror.': '.$descrerror.'<BR/><BR/>'.$cErrMsg.'<BR/><BR/>Texto consulta: '.$consulta[$i];
  17.        exit();
  18.    }
  19. }
  20. mysqli_query($link,'COMMIT');
  21.  
Caso 2: funciona como debería, es decir, ejecuta una sola consulta y no queda registrada (si allí hiciera el control de errores pasa lo mismo que en el Caso 1)

Código
  1. mysqli_query($link,'START TRANSACTION');
  2. for($i=0;$i<$nTotConsultas;$i++){
  3.    mysqli_query($link,$consulta[$i]);
  4.    mysqli_close($link);
  5.    exit();
  6. }
  7. mysqli_query($link,'COMMIT');
  8.  
Estoy usando las versiones 7.4 de PHP y 10.5 de MariaDB.
Quedo a la espera de cualquier sugerencia para solucionar esto.
Gracias.


« Última modificación: 13 Junio 2022, 05:14 am por Anix » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿Diferencias entre rmi y Java web start?
Java
cyberserver 3 3,766 Último mensaje 24 Agosto 2010, 00:22 am
por Debci
[batch] Problema net start spooler
Scripting
vpluque 2 7,300 Último mensaje 8 Mayo 2011, 13:58 pm
por vpluque
[?] Running start: No pending transaction rollback
GNU/Linux
Br1ant 0 2,087 Último mensaje 21 Diciembre 2014, 03:45 am
por Br1ant
Problema con reaver: WPS transaction failed (code: 0x02), re-trying last pin
Wireless en Linux
ysa_bell 0 2,538 Último mensaje 23 Octubre 2019, 13:58 pm
por ysa_bell
MariaDB - Motor de MariaDB no esta consumiendo la memoria cache
Bases de Datos
reinaldo.malo 2 2,737 Último mensaje 6 Abril 2020, 22:17 pm
por reinaldo.malo
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines