Prezados, boa noite.
Ao cair no catch o rollback não funciona, segue abaixo resumo do código:
$pdo->beginTransaction();
try {
$sql = "...";
$stmt = $pdo->prepare($sql);
$stmt->execute();
$stmt_procat = $pdo->prepare("...");
$stmt_procat->execute();
$sql_imagem = "...";
$stmt_imagem = $pdo->prepare($sql_imagem);
$stmt_imagem->execute();
$pdo->commit();
}catch(Exception $e){
$pdo->rollBack();
}
Especificações:
Banco de dados: MySql
Tipo da tabela: InnoDB
Linguagem: PHP
Alguém já passou por este problema ?
Se esse for o código está faltando }
antes do catch!
Na hora de resumir acabei esquecendo de colocar. Já corrigi.
o que acontece, grava em todas ou cancela alguma? Conte um pouco o que acontece
Ele grava todos, porém alguns destes que ele grava cai no catch, porém os dados continuam persistidos no banco mesmo após o rollback.
Tem que simular pra gente o que acontece, tipo tem como colar a tela da exceção?
Esse código é de uma API, constatei que o rollback não funciona pois coloquei para gerar arquivos de log no catch e verifiquei que os dados contidos nos logs estavam no banco de dados mesmo após o rolback.
Posso tentar simular o erro e lhe enviar o print da exceção.
Constatei que a execução dura no máximo 1 segundo, verifiquei que os logs estão sendo gerados a cada 1 segundo.
Verifique o log do servidor e não está gerando nenhum erro.
Suas tabelas estão em MyISAM, se não me engano, transactions não funcionam nessa engine, você deve trocar para InnoDB…
No post também fala sobre auto-commit, que você deve mante-lo desativado, há um link para doc do php falando a respeito…
1 curtida
As tabelas estão em InnoDB.
Vou desativar o auto-commit e testar.
A princípio coloquei o auto-commit como false e o sistema está funcionando corretamente.
Obrigado a todos!