[Cascavel-pm] Duvidas em passar o valor 0 (zero) para uma função.

Rod Za rodzadra em yahoo.com
Quarta Março 9 06:54:32 PST 2005


Marco, muitissimo obrigado (a vc e a todos da lista) pela ajuda.

Vou dar uma verificada nestas dicas/aulas que vcs me passaram.

Rodrigo.

--- Marco A P D´Andrade <mda em embratel.net.br> wrote:

> Rodrigo,
> 
> Mesmo em sua função cabe o uso de placeholders, e suas vantagens, dentre 
> elas o fato de não ser mais necessario se preocupar com o "quote" dos 
> valores...
> 
> Existe uma função similar à sua dentro do DBIx::SearchBuilder:
> <code>
> sub Insert {
>   my($self, $table, @pairs) = @_;
>   my(@cols, @vals, @bind);
>                                                                                                 
>    
> 
> #  my %seen; #only the *first* value is used - allows drivers to specify 
> default
>   while ( my $key = shift @pairs ) {
>     my $value = shift @pairs;
>     #    next if $seen{$key}++;
>     push @cols, $key;
>     push @vals, '?';
>     push @bind, $value;
>   }
>                                                                                                 
>    
> 
>   my $QueryString =
>     "INSERT INTO $table (". join(", ", @cols). ") VALUES ".
>     "(". join(", ", @vals). ")";
>     warn $QueryString if $DEBUG;
>                                                                                                 
>    
> 
>     my $sth =  $self->SimpleQuery($QueryString, @bind);
>     return ($sth);
>   }
> </code>
> 
> A proposito... zero e undef são tratados como FALSE somente em operações 
> lógicas, não quando utilizado em argumentos!
> 
> Sds,
> Marco Antonio
> 
> 
> Rod Za wrote:
> 
> >Galera, muito obrigado pela ajuda.
> >
> >As mensagem de erro que o MySQL me passa é a seguinte:
> >
> >ERROR 1048: Column 'valor' cannot be null
> >
> >e o meu banco de dados exemplo:
> >
> >CREATE TABLE `banco_de_dados` (
> >  `valor` varchar(15) NOT NULL,
> >) TYPE=MyISAM
> >
> >Eu não sei, sempre me confundo como o Perl interpreta o valor 0 (zero)! Me parece q na funcão q
> eu
> >descrevi o valor passado, quando zero, é sempre interpretado como se fosse FALSE (ou mesmo
> NULL) e
> >não como o número 0 (zero)!.
> >
> >Qualquer outro valor !=0 é interpretado perfeitamente.
> >
> >Luiz quando ao uso de PlaceHolders, a minha verdadeira funcão não é tão simples quanto a q eu
> >apresentei anteriormente, só fiz deste modo para melhor ilustrar o tipo de erro q vem
> acontecendo.
> >A verdadeira funcão faz parte de uma classe e é a seguinte:
> >
> ><code>
> >sub user_update($%){
> >        my $self = shift;
> >        my %update = @_;
> >        my @keyArray = keys %update;
> >        my @valueArray;
> >        my $return;
> >        foreach(@keyArray){
> >                push @valueArray, $self->{dbh}->quote($update{$_}) if defined($update{$_});
> >        }
> >        my $sql = "INSERT INTO history (`".join('`,`', em keyArray)."`) VALUES
> >(".join(',', em valueArray).")";
> >        $self->commit if($self->{dbh}->do($sql));
> >}
> ><code>
> >
> >e meu banco de dados:
> ><bd>
> >CREATE TABLE `history` (
> >  `id_history` int(11) NOT NULL auto_increment,
> >  `id_user` int(11) default NULL,
> >  `id_group` int(11) NOT NULL default '0',
> >  `id_printer` int(11) NOT NULL default '0',
> >  `deb_cred` enum('d','c','i','G','U') NOT NULL default 'd',
> >  `valueDoc` float NOT NULL default '0',
> >  `dateJob` datetime NOT NULL default '0000-00-00 00:00:00',
> >  `fromGroup` enum('0','1') NOT NULL default '0',
> >  `n_pages` int(11) NOT NULL default '0',
> >  `jobFileName` varchar(255) NOT NULL default '',
> >  `doc_name` varchar(255) NOT NULL default '',
> >  `ip_ws` varchar(15) NOT NULL default '',
> >  `ws` varchar(30) NOT NULL default '',
> >  `id_status` int(11) NOT NULL default '0',
> >  PRIMARY KEY  (`id_history`),
> >  KEY `id_usuario` (`id_user`,`id_group`,`id_printer`)
> >) TYPE=MyISAM
> ><bd>
> >
> >Muito obrigado,
> >
> >Rodrigo
> >
> >
> >--- Luis Campos de Carvalho <monsieur_champs em yahoo.com.br> wrote:
> >
> >>Rod Za wrote:
> >>
> >>>Olá todos,
> >>>
> >>>Estou com uma dúvida cruel! Quando passo o valor 0 (zero) para uma função que grava este num
> >>>
> >>banco
> >>
> >>>de dados, a minha função dá sempre erro! Como posso contornar isto?
> >>>
> >>>_CODIGO_
> >>>sub teste{
> >>>	my $valor = shift; 
> >>>	my $query = "INSERT INTO banco_de_dados (valor) VALUES ('$valor')";
> >>>	if($dbh->do($query)){
> >>>		$dbh->commit;
> >>>	}
> >>>}
> >>>_FIM_CODIGO_
> >>>
> >>>ex: teste(0); ou teste(´0´); ou my $a=0; teste($a);
> >>>
> >>>dá sempre o mesmo erro, como se o valor 0 (zero) nao fosse passado!
> >>>
> >>>muito obrigado,
> >>>
> >>>
> >>   O correto é usar PlaceHolders, uma técnica de passagem de dados 
> >>implementada por quase todos os drivers DBD:: que existem.
> >>
> >>   __PERL__
> >>   # Eu uso tratamento de erros por exceptions.
> >>   $dbh->PrintError( 0 );
> >>   $dbh->RaiseError( 1 );
> >>   # Para usar placeholders, é preciso construir um query SQL assim:
> >>   $sql = 'INSERT INTO banco_de_dados (valor) VALUES ( ? )';
> >>   # e executá-lo normalmente, passando, é claro, o valor
> >>   # que se deseja inserir, assim:
> >>   my $sth = eval{ $dbh->prepare( $sql ); };
> >>   if( $@ ){ &handle_error(); }
> >>   eval{ $sth->execute( 0 ); };
> >>   if( $@ ){ &handle_error(); }
> >>   __END__
> >>
> >>   Captou, Rod?
> >>   Espero ter ajudado.
> >>   Putamplexos!
> >>-- 
> >>=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
> >>  Luis Campos de Carvalho is BSc in Comp Science,
> >>  PerlMonk [SiteDocClan], Sao Paulo PM Leader,
> >>  Unix Sys Admin && Certified Oracle DBA
> >>  http://br.geocities.com/monsieur_champs/
> >>=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
> >>
> >>_______________________________________________
> >>Cascavel-pm mailing list
> >>Cascavel-pm em pm.org
> >>http://mail.pm.org/mailman/listinfo/cascavel-pm
> >>
> >>
> >
> >
> >	
> >		
> >__________________________________ 
> >Celebrate Yahoo!'s 10th Birthday! 
> >Yahoo! Netrospective: 100 Moments of the Web 
> >http://birthday.yahoo.com/netrospective/
> >
> >
> >------------------------------------------------------------------------
> >
> >_______________________________________________
> >Cascavel-pm mailing list
> >Cascavel-pm em pm.org
> >http://mail.pm.org/mailman/listinfo/cascavel-pm
> >
> 
> 
> _______________________________________________
> Cascavel-pm mailing list
> Cascavel-pm em pm.org
> http://mail.pm.org/mailman/listinfo/cascavel-pm
> 
=== message truncated ===



	
		
__________________________________ 
Celebrate Yahoo!'s 10th Birthday! 
Yahoo! Netrospective: 100 Moments of the Web 
http://birthday.yahoo.com/netrospective/


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