[Resolvido] Rollback PDO não funciona?

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!