[Resolvido] Rollback PDO não funciona?

9 respostas
databasephp7phpmysqlpdo
L

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 ?

9 Respostas

Dragoon

Se esse for o código está faltando } antes do catch!

L

Na hora de resumir acabei esquecendo de colocar. Já corrigi.

Dragoon

o que acontece, grava em todas ou cancela alguma? Conte um pouco o que acontece

L

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.

Dragoon

Tem que simular pra gente o que acontece, tipo tem como colar a tela da exceção?

L

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.

rodevops

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…

L

As tabelas estão em InnoDB.

Vou desativar o auto-commit e testar.

L

A princípio coloquei o auto-commit como false e o sistema está funcionando corretamente.

Obrigado a todos!

Criado 1 de agosto de 2018
Ultima resposta 6 de ago. de 2018
Respostas 9
Participantes 3