Simula uma exceção no meio de uma transação. O DbPHP intercepta o erro, reverte todas as mudanças (Rollback) e mantém a consistência.
| id_conta | titular | saldo | estado_transacao | motivo_reversao |
|---|---|---|---|---|
| 1 | Empresa Matriz Ltda | R$ 10.000,00 | Revertido com Sucesso (Rollback) | Erro intencional: Simulação de falha de conexão na transferência! |
| 2 | Filial Sul Peças | R$ 2.500,00 | Revertido com Sucesso (Rollback) | Erro intencional: Simulação de falha de conexão na transferência! |
| 3 | Fundo de Reserva | R$ 5.000,00 | Revertido com Sucesso (Rollback) | Erro intencional: Simulação de falha de conexão na transferência! |
try {
DB::transaction(function ($driver) {
// Passo 1: Debita R$ 2.000 da Matriz
$driver->execute("UPDATE contas SET saldo = saldo - ? WHERE id_conta = ?", [2000.00, 1]);
// Passo 2: Simula erro crítico ou validação de negócio que falha
throw new \RuntimeException("Falha de comunicação com o Gateway de Pagamentos!");
// Passo 3: Nunca será executado
$driver->execute("UPDATE contas SET saldo = saldo + ? WHERE id_conta = ?", [2000.00, 2]);
});
} catch (\Throwable $e) {
// Transação revertida com segurança via $pdo->rollBack()!
}
// Saldos permanecem intactos:
$contas = DB::query("SELECT * FROM contas");
[
{
"id_conta": 1,
"titular": "Empresa Matriz Ltda",
"saldo": 10000,
"estado_transacao": "Revertido com Sucesso (Rollback)",
"motivo_reversao": "Erro intencional: Simulação de falha de conexão na transferência!"
},
{
"id_conta": 2,
"titular": "Filial Sul Peças",
"saldo": 2500,
"estado_transacao": "Revertido com Sucesso (Rollback)",
"motivo_reversao": "Erro intencional: Simulação de falha de conexão na transferência!"
},
{
"id_conta": 3,
"titular": "Fundo de Reserva",
"saldo": 5000,
"estado_transacao": "Revertido com Sucesso (Rollback)",
"motivo_reversao": "Erro intencional: Simulação de falha de conexão na transferência!"
}
]
id_cliente (INTEGER PK)nome_cliente (TEXT)uf (TEXT)cidade (TEXT)vip (INTEGER 0|1)saldo_credito (REAL)id_produto (INTEGER PK)id_categoria (INTEGER FK)nome_produto (TEXT)preco (REAL)estoque (INTEGER)pedidos.id_pedido (INTEGER PK)pedidos.id_cliente (INTEGER FK)pedidos.status (TEXT)itens_pedido.id_item (INTEGER PK)itens_pedido.qtd (INTEGER)itens_pedido.preco_unitario (REAL)