Agora que você está conectado através do PDO, antes de começar a consultar, você deve primeiro entender como o PDO gerencia as transações.
As transações suportam quatro características principais (ACID):
Atomicidade
Consistência
Isolamento
Durabilidade
Em termos leigos, qualquer operação realizada dentro de uma transação, mesmo que realizada em etapas, tem a garantia de ser aplicada com segurança ao banco de dados e confirmada sem interferência de outras conexões.
As operações de transação também podem ser desfeitas automaticamente mediante solicitação (assumindo que ainda não foram confirmadas), facilitando o tratamento de erros em scripts.
As transações geralmente são implementadas “acumulando” um lote de alterações e tornando-as efetivas ao mesmo tempo. A vantagem de fazer isso é que pode melhorar muito a eficiência dessas alterações;
Em outras palavras, as transações podem tornar os scripts mais rápidos e potencialmente mais robustos (embora as transações precisem ser usadas corretamente para obter tais benefícios).
Infelizmente, nem todo banco de dados suporta transações, então o PDO precisa ser executado no chamado modo "autocommit" quando a conexão é aberta pela primeira vez.
O modo Autocommit significa que cada consulta executada tem sua própria transação implícita se o banco de dados oferecer suporte, ou nenhuma se o banco de dados não oferecer suporte a transações.
Se uma transação for necessária, ela deverá ser iniciada com o método PDO::beginTransaction(). Se o driver subjacente não suportar transações, uma PDOException será lançada (esta é uma condição de erro grave, independentemente das configurações de tratamento de erros).
Depois que uma transação é iniciada, ela pode ser concluída com PDO::commit() ou PDO::rollBack(), dependendo se o código na transação foi executado com sucesso.
Nota: O PDO verifica apenas se possui recursos de transação no nível do driver. Se alguma condição de tempo de execução significar que uma transação não está disponível e o serviço de banco de dados aceitar uma solicitação para iniciar uma transação, PDO::beginTransaction() ainda retornará TRUE sem erros. Um bom exemplo é tentar usar transações em uma tabela MyISAM em um banco de dados MySQL.
Quando o script terminar ou a conexão estiver prestes a ser encerrada, se houver uma transação pendente, o PDO reverterá automaticamente a transação. Esta medida de segurança ajuda a evitar inconsistências caso o script termine inesperadamente - se a transação não for confirmada explicitamente, presume-se que algo deu errado, então um rollback é executado para manter os dados seguros.
Nota: O rollback automático só pode ocorrer após iniciar uma transação via PDO::beginTransaction(). Se você emitir manualmente uma consulta para iniciar uma transação, o PDO não terá como saber e não poderá revertê-la, se necessário.
Execute o processamento em lote em uma transação:
No exemplo a seguir, suponha que um conjunto de entradas seja criado para um novo funcionário e ao qual seja atribuído um ID 23. Além de cadastrar os dados básicos da pessoa, também é necessário registrar o seu salário.
É simples fazer as duas atualizações separadamente, mas ao incluí-las nas chamadas PDO::beginTransaction() e PDO::commit(), você garante que ninguém mais poderá ver as alterações até que sejam concluídas.
Se ocorrer um erro, o bloco catch reverte todas as alterações ocorridas desde o início da transação e imprime uma mensagem de erro.
<?phptry { $dbh = new PDO('odbc:SAMPLE', 'db2inst1', 'ibmdb2', array(PDO::ATTR_PERSISTENT => true)); { die("Não foi possível conectar: " . $e->getMessage());}tente { $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbh->beginTransaction(); $dbh->exec("inserir nos valores da equipe (id, primeiro, último) (23, 'Joe ', 'Bloggs')"); $dbh->exec("inserir em saláriochange (id, valor, data de alteração) valores (23, 50000, AGORA())"); $dbh->commit(); } catch (Exception $e) { $dbh->rollBack(); echo "Falha: " . $e->getMessage();}?>
Você não está limitado a fazer alterações dentro de uma transação, você também pode emitir consultas complexas para extrair dados, e pode usar essas informações para construir mais alterações e consultas quando a transação estiver ativa, você pode garantir que outros não possam fazer alterações enquanto a transação estiver ativa; operação está em andamento.