PHP y MariaDB problema entre start transaction y commit

(1/1)

Anix:
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
mysqli_query($link,'START TRANSACTION');
for($i=0;$i<$nTotConsultas;$i++){
   mysqli_query($link,$consulta[$i]);
   if( mysqli_errno($link)<>0 ) {
       if( mysqli_errno($link)==1062) {
           mysqli_close($link);
           echo 'Registro existente'; exit();
       }elseif( mysqli_errno($link)==1451) {
           echo 'Hay registros relacionados a este &iacute;tem, imposible eliminar/modificar'; exit();
       }else{
           $numerror = mysqli_errno($link); $descrerror = mysqli_error($link);
           mysqli_close($link);
       }
   }
   if($numerror<>0) {
       echo 'Error N&ordm; '.$numerror.': '.$descrerror.'<BR/><BR/>'.$cErrMsg.'<BR/><BR/>Texto consulta: '.$consulta[$i];
       exit();
   }
}
mysqli_query($link,'COMMIT');
 
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
mysqli_query($link,'START TRANSACTION');
for($i=0;$i<$nTotConsultas;$i++){
   mysqli_query($link,$consulta[$i]);
   mysqli_close($link);
   exit();
}
mysqli_query($link,'COMMIT');
 
Estoy usando las versiones 7.4 de PHP y 10.5 de MariaDB.
Quedo a la espera de cualquier sugerencia para solucionar esto.
Gracias.

Navegación

[0] Índice de Mensajes