Pular para o conteúdo

Trabalhando com transações com PHP e MySQL

Dica publicada em Linux / Introdução
Angelito Monteiro Goulart angelito
Hits: 22.590 Categoria: Linux Subcategoria: Introdução
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Trabalhando com transações com PHP e MySQL

Nesta dica mostro como trabalhar com transações com PHP e MySQL, evitando que existam dados inconsistentes no banco de dados causados por comandos SQL que dependam de outros.

Trabalhando com transações utilizando PHP e MySQL

Linux: Trabalhando com transações com PHP e MySQL

Transações é um recurso muito interessante do MySQL, pois permite que você execute uma sequência de comandos SQL de uma só vez, permitindo que você execute determinadas inserções, somente se todas as inserções forem realizadas com sucesso.

Isto assegura que você mantenha seu banco de dados "limpo", evitando a presença de dados órfãos em suas tabelas.

O recurso de transações só está disponível em tabelas que use a 'engine' InnoDB. Outra coisa que deve se levar em conta, é que este recurso está disponível somente na biblioteca 'mysqli'.

Por padrão, o MySQL trabalha no modo AUTO COMMIT, ou seja, cada 'query' é executada na mesma hora em que é enviada. Porém, para trabalhar com transações, precisaremos desabilitar esta opção, ou seja, executar a 'query' realmente, somente na hora que for dado o comando 'commit'.

Terminadas as explicações, vamos ao que interessa.

Não vou tratar sobre como criar tabelas, pois este não é o foco. Mas irei utilizar uma tabela simples com um campo nome. Lembrando que o 'storage engine' da tabela deve ser InnoDB.

Primeiro, devemos criar a conexão com o banco de dados:

$conexao = mysqli_connect("servidor", "usuario", "senha", "banco");
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.


Após isto, devemos desabilitar o modo AUTO COMMIT, esta é a chave para se trabalhar com transações:

mysqli_autocommit($conexao, FALSE);


Criamos também uma variável de controle de erros, que irá verificar se a 'query' foi executada com sucesso:

$erro = 0;


Após isto, vamos criar 3 'queries' para serem executadas:

$query1 = "INSERT INTO nomes (nome) VALUES ('Joao')"; $query2 = "INSERT INTO nomes (nome) VALUES ('Maria')"; $query3 = "INSERT INTO nomes (nome) VALUES ('Jose')";


Executamos as 3 'queries' e verificamos se houve erro em alguma e então incrementamos a variável de controle de erros:

if (!mysqli_query($conexao, $query1)) $erro++; if (!mysqli_query($conexao, $query2)) $erro++; if (!mysqli_query($conexao, $query3)) $erro++;


Ao final de tudo, verificamos se a variável erro é diferente de 0 (ou seja, se houve erros) e então definimos se as inserções devem ser feitas.

Para isto, utilizamos o comando 'mysqli_commit', passando como parâmetro a conexão utilizada. Se houver erro, utilizamos a função 'mysqli_rollback()', que desfaz as 'queries' executadas anteriormente.

if ($erro == 0){ mysqli_commit($conexao); } else { mysqli_rollback($conexao); }


E por fim, temos nosso script completo:

$conexao = mysqli_connect("servidor", "usuario", "senha", "banco"); mysqli_autocommit($conexao, FALSE); $erro = 0; $query1 = "INSERT INTO nomes (nome) VALUES ('Joao')"; $query2 = "INSERT INTO nomes (nome) VALUES ('Maria')"; $query3 = "INSERT INTO nomes (nome) VALUES ('Jose')"; if (!mysqli_query($conexao, $query1)) $erro++; if (!mysqli_query($conexao, $query2)) $erro++; if (!mysqli_query($conexao, $query3)) $erro++; if ($erro == 0){ mysqli_commit($conexao); } else { mysqli_rollback($conexao); }


Se quiser fazer um teste, basta adicionar um erro em alguma das 'queries' executas. Você verá que nenhuma das outras 'queries' foram executadas, eliminando assim, dados inconsistentes em caso de inserções que dependam de outras.

Até a próxima. ;)

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Baixando sites inteiros com o wget

Alt Linux, uma distro russa promissora!

Entendendo o comando chmod

Desligando o PC na hora certa com o shutdown

Configurando o Thunderbird para trabalhar com contas Hotmail

As 10 distribuições mais populares

Resumo para prova LPI 102

Ativando o teclado numérico (Num Lock) ao inicar seu sistema

Dicionário de sinônimos Micha Elvis

Ntop em um G4 com Yellow Dog Linux 6.0

Nenhum comentário foi encontrado.

Contribuir com comentário

Entre na sua conta para comentar.