[Cascavel-pm] Sugestao - Insercao no Banco

Patty Silva ptfzs em yahoo.com.br
Quinta Maio 25 10:29:58 PDT 2006


Bom Pessoal..
eu fiz assim para inserir no Banco:
$update=$variavel."="."'$valor'";
$sql="Insert into tabela1(Nome,DataHora) values($nome,$data) on duplicate key update $update"; 
print "SQL: $sql\n":
$sth = $dbh->prepare($sql);
$sth->execute();
$sth->finish();

a saida na tela do SQL eu colei no mysql e funcionou perfeitamente.. mas no perl da a seguinte msg de erro:

DBD::mysql::st execute failed: Query was empty at teste.pl line 118, <FH> line 532
???


pq sera?? :)





Igor Sutton <igor.sutton em gmail.com> escreveu: Seguem comentários:

my %table = (
    "Variavel 1" => "T1r", 
    "Variavel 2"   => "T2r",
    "Variavel 3" => "T3r",
);


$dbh = DBI->connect("DBI:mysql:$DBName",$UserName, $password) || die("Erro de Conexao:$DBI:errstr") ; 

chdir ($caminho) || die "\n *** Erro no diretorio $caminho ***";

for(parse_dir(`ls -ltr`)) 
{
($arquivo) = @$_;

Eu modificaria este trecho de código:


 open(FH, "<$arquivo") or die("Arquivo nao encontrado");
@table = <FH>; 
shift @table; # descarta primeira linha
close(FH);
foreach(@table)  
{

para:
 
open FH, "<", $arquivo or die "Problemas para abrir o arquivo $arquivo: $!";
# Se o seu arquivo for muito grande, você não vai querer que ele
# transforme todo o conteúdo em um graaaaaaaaaande array consumindo 
# toda a memória. foreach() é utilizado em contexto de array, por isso este
# comportamento.
while ($_ = <FH>) {
    next unless $. > 1;

 if ($_ =~ /^\s*VARIAVEL/) 
{
  
    if( (s#^\s*VARIAVEL-S##) or (s#^\s*VARIAVEL-B##) ) 
    {
    
    
    
     }
      else
     {

Este aqui também pode ser modificado: 


                (undef,$variavel,$nome,undef,undef,undef,undef,undef,$data_arquivo,undef,$valor,$var) = split /\s+/, $_;

($nome, $data_arquivo, $valor, $var) = (split /\s+/)[1,2,8,10,11];
 

     $data_arquivo =~ s/(\d\d\d\d)(\d\d)(\d\d)_(\d\d)(\d\d)/$1-$2-$3 $4:00/;
 
     if (defined $table{$variavel}) 
     {
         
        $variavel = $table{$variavel};
              
     }

Creio que esteja aqui a sua dúvida, e uma possível solução, pois não lembro se podemos utilizar placeholders em nome de colunas também: 


     $update = "$variavel=$valor";
     
     $sql="Insert into tabela1(Nome,DataHora) values($nome,$data) on duplicate key update $update"; 

my $query = qq/INSERT INTO TABELA1(Nome, DataHora) values (? , ?) ON DUPLICATE KEY UPDATE ? = ?/;


my $sth = $dbh->prepare($query);
$sth->execute($nome, $data, $variavel, $valor) or warn "Problemas ao executar SQL: ", $dbh->errstr; 

    # $sth =  $dbh->prepare($SQL);
    # $sth->execute();
     # $sth->finish();

    }
         
  }
    
Entao pessoal esta ai!! :) desculpe se anteriormente nao postava o codigo.. daqui pra frente comecarei a postar!! :P 
Ajuda os companheiros tb!!

:***




-- 
Igor Sutton Lopes
http://www.izut.com/ _______________________________________________
Cascavel-pm mailing list
Cascavel-pm em pm.org
http://mail.pm.org/mailman/listinfo/cascavel-pm

		
---------------------------------
 Navegue com o Yahoo! Acesso Grátis, assista aos jogos do Brasil na Copa e ganhe prêmios de hora em hora.
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20060525/c6e5d096/attachment.html 


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