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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  Mostrar Temas
Páginas: [1]
1  Programación / PHP / 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.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines