PHP::Classe para Transação
Uma transação pode ser definida como um grupo de tarefas. Uma única tarefa é a unidade mínima de processamento que não pode mais ser dividida.
Antes de continuar você dever ler primeiro esse post, pois iremos reutilizar todos os arquivos implementados presente nele.
PHP::Classe para Conexão
Por que uma classe para aberura de conexão? Possuir uma linha de conexão esplícita no código fonte e passando-a por paramêtro não é algo positivo, por que possuí informações específicas do banco de dados, por exemplo em uma conexão mysql passamos conteúdos como
O que séria uma transação de um banco de dados?
Uma transação de banco de dados é uma sequência de múltiplas operações executadas em um banco de dados e todas serviram como uma única unidade lógica de trabalho ocorrendo totalmente ou não. Em outras palavras, nunca há o caso de apenas metade das operações serem realizadas e os resultados salvos. Quando uma transação de banco de dados está em andamento, o estado do banco de dados pode ficar temporariamente inconsistente, mas quando a transação é confirmada ou termina, as alterações são aplicadas.
Ao realizamos uma transação com o banco de dados, precisamos garantir:
Atomicidade: Tudo seja realizado ou nada;
Consistência: BD esteja íntegro após a transação;
Isolamento: Resultado visível somente após o sucesso da transação;
Durabilidade: Persistência quando sucesso, não perdida em caso de falhas.
Começando a implementação
Sistema de diretório
📦ClasseTransacao
┣ 📂api
┃ ┣ 📜Connection.php
┃ ┗ 📜Transaction.php
┣ 📂classes
┃ ┗ 📜Produto.php
┣ 📂config
┃ ┗ 📜config.ini
┣ 📂database
┃ ┗ 📜produto.db
┗ 📜index.php
Classe Transaction
Classe Produto
Testando a classe
INSERT INTO produto (descricao, estoque, preco_custo, preco_venda, codigo_barras, data_cadastro, origem) VALUES ('Maçã',23,125,5,2431313123, '2023-08-29','F')
INSERT INTO produto (descricao, estoque, preco_custo, preco_venda, codigo_barras, data_cadastro, origem) VALUES ('Laranja',5,100,5,2431313123, '2023-08-29','L')
Causando uma falha na transação
Sem o valor do estoque do produto2 tanto ele quanto o produto1 não seram gravados no banco de dados.