Normalmente bancos como o mysql e postgreSQL trabalham em modo autocommit, ou seja, ao fazer uma alteração na estrutura do banco ou de tabelas ou ainda alterar ou excluir registros, essas alterações já passam a ser efetivas a partir da execução. Isso pode ser alterado de forma que esses tipos de alterações só sejam efetivas após a execução de um comando commit, além disso podemos voltar (rollback) as alterações caso alguma coisa aconteça como se fosse uma espécie de ctrl+z do sql.
Para trabalhar com transações utilizamos o método beginTransaction(), isso desliga o autocommit, e todas as operações de insert, update, alter table, drop table, comandos sql que alterem as estruturas dos bancos, tabelas ou registros só serão efetivados no banco após a execução do método commit() ou serão ignorados após um rollback. Ex.:
$db->beginTransaction();
$sql = "Insert into lancamento (clien_id,lanca_historico,lanc_valor) VALUES (231,"Pagto Conta Telefonica",235.12)";
try {
$db->query($sql);
$update = "Update conta_cliente set cclie_saldo = conta_cliente.cclie_saldo + $valor WHERE clien_id=231";
}
catch (PDOException $e){
$db->rollback();
print $e->getMessage();
}
?>
Nesse exemplo se qualquer uma das queries não for executada com sucesso por qualquer que seja o motivo, será executado um rollback fazendo com que nenhuma das duas operações seja efetivada no banco.
Conclusão
O uso das novidades da PDO com técnicas de captura e tratamento de exceções, juntando com outra boas práticas de programação e orientação a objetos traz muitas vantagens ao desenvolvimento de aplicações PHP.
Espero que os conceitos principais propostos, bem como algumas técnicas possam ser aplicadas com a PDO tenham sido compreendidas, pois uma vez tendo compreendido os conceitos facilita muito o desenvolvimento e a curva de aprendizado.
Estou trabalhando no desenvolvimento de uma pequena aplicação usando PDO para fixar melhor os conceitos e trabalhar um pouco melhor conceitos como MVC e OO.
Até a próxima, obrigado.