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

Rod Za rodzadra em yahoo.com
Quarta Março 9 05:33:55 PST 2005


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/


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