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

Luis Motta Campos luismottacampos em yahoo.co.uk
Sexta Janeiro 26 00:02:50 PST 2007


On Jan 25, 2007, at 7:25 PM, Patty Silva wrote:
> Ola Luis..
>
> 1. Mensagem de erro;
>
> DBD::mysql::st execute failed: You have an error in your SQL  
> syntax; check the manual that corresponds to your MySQL server  
> version for the right syntax to use near ''NOME'=''BlABLA''' at  
> line 1 at sql line 50.
>

   Isso não é Perl, você sabe. Este é um erro do seu SQL, e é gerado  
por que (eu acredito) você não pode passar nomes de colunas usando  
placeholders, eles são automaticamente protegidos contra tudo e não  
mais reconhecidos como nomes de colunas.

   Para os nomes das colunas, tente usar "sprinf()".

> rollback ineffective with AutoCommit enabled at sql line 57.
> Rollback ineffective while AutoCommit is on at sql line 57.
> DBD::mysql::db rollback failed: Rollback ineffective while  
> AutoCommit is on at sql line 57.
> DBD::mysql::db rollback failed: Rollback ineffective while  
> AutoCommit is on at sql line 57.

   Todo este carnaval aqui é por que você não usou { AutoCommit =>  
0 } na sua chamada para DBI::connect().

   Espero que eu tenha usado certo no meu. Faz já alguns anos que eu  
não preciso escrever código para estabelecer uma conexão com base de  
dados (os sistemas em que eu tenho trabalhado fazem isso já há muito  
tempo antes de eu trabalhar com eles...).

> 2. Nome e versão da sua base de dados;
>
> Mysql - 5.0

   Ah! Agora eu posso olhar o manual e ler que maluquice é essa de  
"ON DUPLICATE KEY UPDATE"...

   Na minha humilde opinião, isto é um "non-feature", e deveria ser  
relatado como "bug" para o pessoal de desenvolvimento do MySQL. Se  
você não sabe o que você tem na sua base de dados, não deveria estar  
tentando inserir chaves primárias...

   E sim, mesmo que isso custe mais um SELECT apenas para eu saber o  
que tem na base, o programador já deveria ter feito isso: como é  
possível que alguém tenha um sistema que admita UPDATEs sem saber o  
que existe na base de dados neste momento? Se isso existe, pode  
acreditar, eu acho uma falha de projeto... ;-)

> 3. Nome e versão do seu sistema operacional;
>
> Linux, SUSE 10.2

   Sobre o Linux: parabéns. Você é uma mocinha inteligente e escolheu  
um sistema operacional bom.
   Sobre ser SUSE: lamento muito por você... ;-) está na rabeta da  
onda, quase caindo para trás...

> 4. Versão do seu perl;
>
> This is perl, v5.8.8 built for i586-linux-thread-multi

   Eu conheço este output. Parabéns de novo por saber onde pegar  
estas coisas.
   Você usou "perl -V". Poderia ter colado ele inteiro, se este fosse  
o começo da sua pergunta. Ali tem muita informação sobre o seu sistema.

> E continua dando o erro :(

   Claro! Seu SQL tem problemas de sintaxe!
   Você precisa saber qual coluna quer atualizar, ou construir este  
pedaço do SQL no ato.
   Desta forma, vai conseguir passar os valores usando placeholders,  
como deve ser.

> Nao consegui excluir as aspas que ele coloca no ?=?            "NOME"

   Se você leu a minha explicação sobre placeholders, acima, já sabe  
o que está errado.
   Não acredito que nenhuma proposta que a gente possa fazer para  
resolver isso passe pelo crivo do Tim Bunce, na lista dos  
desenvolvedores do DBI2. De qualquer forma, eu vou tentar falar com  
ele sobre isso... talvez, mas só talvez, ele tenha alguma sugestão.

   Espero que agora as coisas tenham melhorado.
   Me conta se você conseguir, sim?
   Putósculo para as meninas, putamplexos para os meninos... ;-)
--
Luis Motta Campos is software engineer,
perl fanatic evangelist, amateur {cook, photographer}
and DBI2 Developer (when I get time for this)




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