[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