[Cascavel-pm] Res: Duvida $dbh->prepare

Igor Sutton igor.sutton em gmail.com
Quinta Janeiro 25 07:49:37 PST 2007


Patty,

Em 25/01/07, Patty Silva<ptfzs em yahoo.com.br> escreveu:
>
> Ola Luis..
> Aproveitando o seu codigo, tentei implementar o codigo abaixo, so para ver c
> funciona:
>
>
> @data_hash_references=('2007-01-23 12:00');
> $variavel='Nome'';            -> essa variavel pode mudar...
> $flag='BLABLA';
> $id='33';
> $table='tabela2';
>
>
> my $sql = qq/ INSERT INTO $table(Nome,DataHora) VALUES(?,?) ON DUPLICATE KEY
> UPDATE ?=? /;
>
> my ( $sth );
>
> eval {
> $sth = $dbh->prepare( $sql );
>
> foreach my $data(@data_hash_references)
> {
>
>    $sth->execute($id,$data,$variavel,$flag);
>
> }
> $sth->commit;
> };
> if( $@ )
> {
>   $dbh->rollback;
>   die "Pau de base de dados: $@";
> }
>
>
>
>
> So que ele da erro de Sintaxe quando ele atribui o ?=? eu acho q ele coloca
> uma aspas...
>
> :D Alguem saberia dzer  o pq??
>
>
> Obnrigada + uma vez...


Os placeholders fazem teste de sanidade para  evitar que você coloque
um código SQL malicioso (acredito que o Luis possa dar mais exemplos
disso).

Gostaria que você explicasse a sua query:

my $sql = qq/ INSERT INTO $table(Nome,DataHora) VALUES(?,?) ON
DUPLICATE KEY UPDATE ?=? /;

Em que situações o campo do UPDATE será modificado?

Ah, a propósito, o erro de sintaxe acontece pois o banco não conhece
as tabelas como 'tabela', apenas pela bareword.

Talvez tenha algum ponto sem nó aqui e alguém queira complementar.

HTH!
-- 
Igor Sutton Lopes <igor.sutton em gmail.com>


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