[SP-pm] Res: DBI - placeholders

André Garcia Carneiro andre.garcia.carneir em terra.com.br
Terça Julho 31 12:14:05 PDT 2007


> Oi André,
>     vou te dar um exemplo de placeholders :
> 
>     $sth=$dbh->prepare('INSERT INTO table VALUES (?,?,?)');
>     $sth->execute('placeholder1','2',3);
> 
>     Consiste em vc utilizar no comando SQL o ? ao invés dos dados diretamente.
>     No exemplo ele vai trocar o (?,?,?) pelos três dados fornecidos no execute.
>     Flw.

Valeu Daniel! Eu sei pra que serve um placeholder :D!!!!

A minha pergunta, é se o placeholder do DBI trata caracteres que precisam de escape, por exemplo: 

Imagine que eu quero inserir o seguinte dado no banco de dados:

'Espelho d'água'.  

Como você deve saber, aspas simples servem para limitar strings(pelo menos nos SGBDs que eu conheço). Como
estou usando ORACLE, e por enquanto não estou usando placeholders(o código já estava assim quando cheguei.
Pretendo modificar, mas não tenho autorização por enquanto), o script para simplesmente porque encontra a aspa
simples, e acha que a string terminou. Pra resolver isso "porcamente", basta substituir ' por ''(aspa simples e
outra aspa simples), que ORACLE vai entender que essa aspa é um 'escape'aspa, e irá considerar como parte da
string. 

No entanto imagino que se utilizasse placeholder do DBI, ele resolveria isso para mim, já que ele faz uma série
de verificações. É só curiosidade, não sei se realmente placeholders resolvem isso, pois não achei nada na
documentação(perldoc DBI) sobre isso. Mesmo porque SGBDs diferentes tratam isso de maneira diferente. Só queria
saber se placeholder trata isso automaticamente.... 


De qualquer forma valeu pela sua atenção, Daniel


Cheers!
  

--
André Garcia Carneiro
Developer(Perl/PHP)
Member of "São Paulo Perl Mongers" - http://sao-paulo.pm.org



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