PHP Assuntos DOP e auto-commit
Agora conectado via DOP entrou antes do início da consulta, você deve primeiro entender como DOP é de gerir os negócios.
suporte a transações quatro propriedades (ácido):
- Atomicidade (atomicidade)
- Consistência (consistência)
- Isolamento (Isolation)
- Persistente (durabilidade)
Mais simplesmente, qualquer operação realizada em uma transação, mesmo uma implementação faseada, mas também para garantir a segurança aplicado ao banco de dados, e não será apresentado em interferência tempo de outras conexões.
operações de transação também pode ser revogada automaticamente mediante pedido (assumindo que ainda não apresentados), o que torna mais fácil de manipular erros no script.
A transação geralmente é feito por uma série de mudanças "poupança" para cima e depois deixa-se entrar em vigor e implementado, os benefícios de fazê-lo é proporcionar a eficiência destes pode ser muito alterada.
Em outras palavras, as transações podem tornar seus scripts mais rápido e potencialmente mais robusto (você ainda precisa usá-los corretamente para colher esse benefício).
Infelizmente, nem todos os banco de dados suporta transações, por isso, quando você abre a conexão, DOP necessita que o chamado modo de operação "auto-commit".
Auto-commit modo significa que se o suporte de banco de dados, cada execução de consulta tem a sua própria transação implícita, se o banco de dados não suporta transações, não.
Se precisar de uma transação, você deve usar o método PDO :: beginTransaction () para iniciar. Se o driver subjacente não suporta transações, lançar uma PDOException exceção (independentemente de que tipo de configurações de tratamento de erros, esta é uma condição grave erro).
Uma vez que a transação está disponível PDO :: commit () ou PDO :: Rollback () para ser concluído, dependendo do código de transação está sendo executado com sucesso.
Nota: DOP unicamente se a capacidade de processamento de transações na inspeção camada de motorista. Se alguma condição de tempo de execução significa que uma transação não estiver disponível, e o serviço de banco de dados aceita uma solicitação para iniciar a operação, PDO :: beginTransaction () ainda irá retornar TRUE e sem erros. Tente usar a transação é um bom exemplo nas tabelas MyISAM de banco de dados MySQL.
Quando o script terminou ou se a conexão está prestes a ser fechado, se não houver uma transação concluída, PDO irá automaticamente reverter a transação. Esta medida de segurança ajuda a evitar inconsistências no script termina inesperadamente - se não comprometer explicitamente a transação, em seguida, o pressuposto é errado em algum lugar, então a reversão é realizada para garantir a segurança dos dados.
Nota: Somente iniciar uma transação PDO :: beginTransaction () mais tarde, pode acontecer automaticamente revertida. Se você emitir manualmente uma consulta para iniciar uma transação, o DOP não pode saber, de modo que, se necessário, não pode ser revertida.
Numa operação de execução de lote:
No exemplo a seguir, suponha que você crie um conjunto de entradas para os novos funcionários, atribuir um ID 23 é. Além dos dados básicos da pessoa registro, mas também tem de gravar o seu salário.
Ambas as atualizações são concluídas, é muito simples, mas fechando a PDO :: beginTransaction () e chamada PDO :: commit (), é possível assegurar que, antes das mudanças, outras pessoas não podem ver essas mudanças.
Se ocorrer um erro, a captura bloquear todas as alterações desde a transação foi revertida desde o início, e emite uma mensagem de erro.
<?php try { $dbh = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2', array(PDO::ATTR_PERSISTENT => true)); echo "Connected\n"; } catch (Exception $e) { die("Unable to connect: " . $e->getMessage()); } try { $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->beginTransaction(); $dbh->exec("insert into staff (id, first, last) values (23, 'Joe', 'Bloggs')"); $dbh->exec("insert into salarychange (id, amount, changedate) values (23, 50000, NOW())"); $dbh->commit(); } catch (Exception $e) { $dbh->rollBack(); echo "Failed: " . $e->getMessage(); } ?>
não se limita a mudanças na transação, ele pode emitir consultas complexas para extrair dados, mas também para construir mais mudanças e consulta utilizando essas informações, quando a transação está ativa, você pode garantir que outras pessoas não podem fazer mudanças na operação em curso.