[Cascavel-pm] Sugestao - Insercao no Banco
Patty Silva
ptfzs em yahoo.com.br
Quinta Maio 25 09:57:58 PDT 2006
Igor, essa solucao sugerida
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;
Nao funciona!
Problemas ao executar SQL: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''END' = 'MINAS'' at line 1 at teste.pl line 109, <FH> line 45.
e assim vai.. para todas as linhas!!
?? 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
---------------------------------
Abra sua conta no Yahoo! Mail - 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz.
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/cascavel-pm/attachments/20060525/5be511cd/attachment-0001.html
Mais detalhes sobre a lista de discussão Cascavel-pm