<html><head><style type="text/css"><!-- DIV {margin:0px;} --></style></head><body><div style="font-family:times new roman, new york, times, serif;font-size:10pt"><div style="font-family: times new roman,new york,times,serif; font-size: 10pt;">Respondido minha duvida anterior :-)<br><br>Obrigada pela eficiencia na resposta!!<br>:D<br><br><div style="font-family: times new roman,new york,times,serif; font-size: 12pt;">----- Mensagem original ----<br>De: André Garcia Carneiro <andre.garcia.carneir@terra.com.br><br>Para: cascavel-pm <cascavel-pm@pm.org><br>Enviadas: Sexta-feira, 26 de Janeiro de 2007 15:15:09<br>Assunto: Re: [Cascavel-pm] [Spam] Res: Res: Duvida $dbh->prepare<br><br><div> <br>> <br>> Esta ai pessoal...... uma coisa que nunca coloco nos meus porgramas quando busco no BANCO eh o <br>$sth2->commit; ??? eh necessario??? pra q serve??<br>> <br><br>Bom, em primeiro lugar vi que você trabalha com MySQL.
MySQL recentemente começou a trabalhar com transações,<br>que é o motivo pelo qual você deve usar $sth->commit. Simplificando, uma transação permite que você "volte" o<br>estado de um banco de dados , ou confirme esse estado através de comandos SQL. Normalmente esses comandos se<br>resumem a <br><br>BEGIN(indica que você quer iniciar uma transação)<br>COMMIT(indica que após uma série de comandos do tipo "INSERT, UPDATE, DELETE" etc você pode confirmar essas<br>operações que até então não estavam confirmadas)<br><br>ROLLBACK(indica que você pode voltar o estado do banco de dados, ou seja, "desfaz" todos os comandos que você<br>executou depois de BEGIN).<br><br>Claro que a sintaxe pode variar, por exemplo, no MySQL ao invés do BEGIN, você usa START_TRANSACTION.<br><br><br>Pois bem, após essa minúscula introdução, vamos para o que interessa. A classe DBI permite que você utilize<br>transações desde que o seu gerenciador de banco de dados
permita isso. Para fazer isso você primeiro deve:<br><br>1 - Setar o AutoCommit como 0. Isso porque o default é 1, e isso significa(a grosso modo), que você não poderá<br>realizar 'rollback', pois o sistema já teria confirmado os seus comandos SQL. Para setar o AutoCommit, você<br>deve fazer como o Champs já explicou em e-mails anteriores, através do comando 'DBI->connect(<parâmetros de<br>conexão>,{AutoCommit=>0,RaiseError=>1});' <br><br>2 - Colocar a execução da query dentro de um sistema de tratamento de erros. Tradicionalmente, em um bloco<br>eval... como você mesma já fez:<br>eval{<br> $sth = $dbh->prepare_cached($SQL);<br> $sth->execute;<br>}; #notação do perl. Sem esse ponto-vírgula você terá problemas.<br>if($@ || $DBI::errstr) #Se der chabú por algum motivo, então
captura-se o erro<br>{<br> $@ .= $DBI::errstr; # Só pra garantir que haverá uma mensagem de erro... Para quem quiser saber, tive<br>problemas com isso, e essa foi uma solução que funcionou.<br> $dbh->rollback; # voltando ao estado anterior ao comando em $SQL.<br> $result = $@;<br>}<br>else<br>{<br> $dbh->commit; #Tudo ok... confirmando o comando e gravando as informações no banco de dados<br> $result = 1;<br>}<br><br><br><br>3. Sempre, mas SEMPRE MESMO faça $dbh->disconnect. Se você precisar de outra conexão. Evitará problemas se<br>precisar de outra conexão, e usará mais racionalmente os recursos do servidor.<br>$sth->finish; # se não precisar mais utilizar a sua conexão, é uma boa idéia finalizar o statement handler.<br>$dbh->disconnect; <br><br><br>#Fim<br><br><br>Espero que tenha ficado
mais claro agora..<br><br><br><br><br>Cheers!<br><br><br><br><br><br><br><br>--<br>André Garcia Carneiro<br>Developer(Perl/PHP)<br>Member of "São Paulo Perl Mongers" - <a target="_blank" href="http://sao-paulo.pm.org">http://sao-paulo.pm.org</a><br><br>_______________________________________________<br>Cascavel-pm mailing list<br>Cascavel-pm@pm.org<br><a target="_blank" href="http://mail.pm.org/mailman/listinfo/cascavel-pm">http://mail.pm.org/mailman/listinfo/cascavel-pm</a><br></div></div><br></div></div><br>__________________________________________________<br>Fale com seus amigos de graça com o novo Yahoo! Messenger <br>http://br.messenger.yahoo.com/ </body></html>