[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

D

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

L

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

D

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.

D

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.

R

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