Re: encore Perl

Top Page

Reply to this message
Author: Olivier_Allard-Jacquin
Date:  
To: guilde
Subject: Re: encore Perl


     Bonjour,


le problème vient du fait que le "'" de "Nombre%20d'enregistrements" est
un caractère SQL. Il convient donc de "backslasher"
(en Français: mettre des "\") les caractères qui appartiennent à la syntaxe
SQL.

donc si $toto contient la chaine à stocker dans la base de données, il faut
faire:
$toto =~ s/\'/\\\'/g;

Explication:
s/ => "replacement"
\' => le caractère "'" (il faut backslasher le "'" car perl l'interprete lui aussi)
/ => "par"
\\\' => la chaine "\'" (il faut backslasher le "\" et "'" le car perl les interprete lui aussi)
/g => faire ce remplacement autant de fois que nécéssaire (ie: ne pas s'arreter au 1er remplacement)


Le "backslash", c'est assez terrible lorsque l'on mélange les langages
(ici, Perl et SQL) ....


Remarque 1: Je te conseillerai peut-être de backslasher aussi le "%" qui
est
un caractère utilisé par la syntaxe SQL (pour les requêtes "SELECT")

   Une documentation MySQL complète (en Français, et téléchargeable ...):
          http://dev.nexen.net/docs/mysql/annotee/manuel_toc.php




Remarque 2: Je te conseille FORTEMENT de mettre entre "'" les chaines de
caractères que tu vas stocker dans la base de données, via la requète SQL.

Exemple: Si tu stockes dans le champ "A" de ta table "TABLE" la chaine
"hello word", il NE faut PAS écrire:

insert into TABLE set A=hello word

MAIS:

insert into TABLE set A='hello word'


                                          Olivier



> Bonjour,
>
> Je lis un fichier (texte) pour remplir une autre fichier (mysql)
>
> Au moment de INSERT j'ai la ligne d'erreur :
>
> DBD::mysql::st execute failed: You have an error in your SQL syntax near
> 'enregistrements%20affectés%20: 1"','"Mozilla/4.0 (compatible; MSIE
> 6.0; Win' at line 3 at ./perl/insert.pl line 152, <FILE> line 256.
>
> un des champs à remplir =
>

"https://m....erreur%60+WHERE+1&message=Nombre%20d'enregistrements%20affecté

> s%20:&nbsp;1"
>
> Chaque fois qu'un champ se termine par cela => erreur et enreg non créé!
>
> Comment lui dire de ne pas faire d'interprétation!
>
> Cette base sert pour plusieurs petites applis.
>
> J'ai la même chose dans une zone qui n'a pas de guillemets et cela passe
> sans problème!
>
> Si vous avez la solution... (enlever les ""? si oui, quelle formules
> appliquées? $toto =???????????|;)