[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