[Cascavel-pm] Duvida $dbh->prepare

Luis Motta Campos luismottacampos em yahoo.co.uk
Quinta Janeiro 25 03:31:56 PST 2007


On Jan 25, 2007, at 12:15 PM, Patty Silva wrote:
> Bom estou tentando colocar 3 instrucoes de INSERT so que nao estou  
> conseguindo..
> Isso eh possivel?

   Não.

> my $sql=qq{INSERT into table1(Nome,DataHora) values 
> ($nome,'$datahora') on duplicate key update  
> $variavels='$result_flags';  };
> my $sql1=qq{INSERT into  table1(Nome,DataHora) values 
> ($nome,'$datahora1') on duplicate key update  
> $variavels='$result_flags';  };
> my $sql2=qq{INSERT into  table1(Nome,DataHora) values 
> ($nome,'$datahora2') on duplicate key update  
> $variavels='$result_flags';  };
>
> my $sql_insert=$sql."\n"..$sql1."\n".$sql_2;
> $sth = $dbh->prepare($sql_insert) || die $DBI::errstr;
> $sth->execute || die $DBI::errstr;


   Você deveria implementar isso assim:

   #!/usr/bin/perl
   use warnings;
   use strict;
   use DBI;

   my $dbh = DBI->connect( $dsn, $user, $passwd, { PrintError => 0,  
RaiseError => 1, AutoCommit => 0 } )
     or die "Pau na base de dados: [$DBI::errstr]\n";

   ### enquanto isso, noutra parte do seu programa...

   my $sql = <<'SQL' ;
INSERT INTO table1( Nome, DataHora )
   VALUES( ?, ? )
   ON DUPLICATE KEY UPDATE ?=?
SQL

   eval{
     my $sth = $dbi->prepare( $sql );
     foreach my $data ( @data_hash_references ){
       $sth->execute( $data->{nome}, $data->{datahora}, $data-> 
{variavels}, $data->{result_flags} );
     }
     $sth->commit;
   };
   if( $@ ){
     $dbh->rollback;
     die "Pau de base de dados: $@";
   }

> OBS: se eu colocar somente o $sql funciona.. entao nao eh problema  
> de sintaxe.. :)

   Isso acontece por que você não pode usar ';' ou qualquer outro  
limitador de instruções no SQL.
   Você tem de passar uma instrução de cada vez, ou o DBI não vai  
conseguir retornar os erros e estados da base de dados para você.

   Espero que meu exemplo seja claro o bastante.
   Eu não conheço algumas das instruções SQL que você está usando,  
mas presumi que elas funcionem desta forma...
   Putamplexos.
--
Luis Motta Campos is software engineer,
perl fanatic evangelist, and amateur {cook, photographer}




Mais detalhes sobre a lista de discussão Cascavel-pm