<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&nbsp; 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 &lt;andre.garcia.carneir@terra.com.br&gt;<br>Para: cascavel-pm &lt;cascavel-pm@pm.org&gt;<br>Enviadas: Sexta-feira, 26 de Janeiro de 2007 15:15:09<br>Assunto: Re: [Cascavel-pm] [Spam]  Res:  Res: Duvida  $dbh-&gt;prepare<br><br><div> <br>&gt; <br>&gt; Esta ai pessoal...... uma coisa que nunca coloco nos meus porgramas quando busco no BANCO eh o&nbsp;&nbsp; <br>$sth2-&gt;commit;&nbsp;&nbsp;??? eh necessario??? pra q serve??<br>&gt; <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-&gt;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-&gt;connect(&lt;parâmetros de<br>conexão&gt;,{AutoCommit=&gt;0,RaiseError=&gt;1});'&nbsp;&nbsp; <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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $sth = $dbh-&gt;prepare_cached($SQL);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $sth-&gt;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>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$@ .= $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>&nbsp;&nbsp;&nbsp;&nbsp; $dbh-&gt;rollback; # voltando ao estado anterior ao comando em $SQL.<br>&nbsp;&nbsp;&nbsp;&nbsp; $result = $@;<br>}<br>else<br>{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$dbh-&gt;commit; #Tudo ok... confirmando o comando e gravando as informações no banco de dados<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$result = 1;<br>}<br><br><br><br>3. Sempre, mas SEMPRE MESMO faça $dbh-&gt;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-&gt;finish; # se não precisar mais utilizar a sua conexão, é uma boa idéia finalizar o statement handler.<br>$dbh-&gt;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>