[Cascavel-pm] DBD::ODBC, escape sequences e placeholders

Alceu Rodrigues de Freitas Junior glasswalk3r em yahoo.com.br
Quarta Dezembro 9 20:59:51 PST 2009


Nilson Santos Figueiredo Jr. escreveu:

> Apenas uma sugestão: ao invés de alterar a query, colocando
> placeholders na própria query, sugiro utilizar $dbh->quote no
> parâmetro, que serve justamente pra este propósito.
> Aliás, se alguém tiver a paciência de ler a manpage do DBI, eu tenho
> quase certeza que tem uma maneira de contar pro DBI o tipo dos
> parâmetros e aí ele faz a coisa certa automaticamente, mas eu estou
> sem tempo agora pra indicar certinho, mas tenho quase certeza que está
> lá.

Obrigado Nilson e Eden!

Vou postar o código aqui como referência para outros (ou eu mesmo, se 
esquecer um dia):

<code>
sub update_project {

     my $self = shift;

     # hash ref
     my $project = shift;

     my $query = q(
	UPDATE t_pm_projeto
SET    nom_projeto               = ?,
        data_criacao              = ?,
        data_atualizacao          = ?,
        cod_status                = ?,
        nom_produto               = ?,
        num_pacientepotencialmes  = ?,
        num_pacientemesatual      = ?,
        nom_setor                 = ?
WHERE  cod_projeto               = ?
);

     $self->{sth_upd_proj} = $self->{dbh}->prepare($query);

     $self->{sth_upd_proj}->bind_param( 1, $project->{name} );
     $self->{sth_upd_proj}->bind_param( 2, "{d '" . $project->{creation} 
.. "'}" );
     $self->{sth_upd_proj}->bind_param( 3, "{d '" . $project->{update} . 
"'}" );
     $self->{sth_upd_proj}->bind_param( 4, $project->{status} );
     $self->{sth_upd_proj}->bind_param( 5, $project->{product} );
     $self->{sth_upd_proj}->bind_param( 6, $project->{patientsPotential} );
     $self->{sth_upd_proj}->bind_param( 7, $project->{patientsTotal} );
     $self->{sth_upd_proj}->bind_param( 8, $project->{sector} );
     $self->{sth_upd_proj}->bind_param( 9, $project->{id} );

     my $ret = $self->{sth_upd_proj}->execute();

     $self->{sth_upd_proj}->finish();

     return $ret;

}
</code>

Bastou colocar o escape sequence concatenado com os valores de data e 
funcionou conforme o esperado!

[]'s
Alceu



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