IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SGBD Perl Discussion :

Caractère spéciaux dans les requêtes SQL


Sujet :

SGBD Perl

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Caractère spéciaux dans les requêtes SQL
    Bonjour,
    voila j'essaie de monter un wiki avec XWiki et j'ai récupéré un tableau de définition à intégrer dans le wiki.
    J'ai réussi à créer avec perl la liste des champs à insérer dans la table mais dans les définition il y a souvent des caractères spéciaux tels que é, à, ' ou €.
    J'ai réussi afficher les côtes en les doublant et les accents en encodant en UTF-8 (ma table est en latin1 donc je fais un "SET NAMES 'UTF8'" ). Mais pour le € il refuse les requête.

    voila un exemple de requête refusée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    use DBI;
    use CGI;
    use Encode::Encoder qw(encoder);
     
    $co = new CGI;
    print $co->header;
     
    $database="test";
    $hostname="localhost";
    $login = "root";
    $mdp = "xxxx";
     
     
    $dsn = "DBI:mysqlPP:database=$database;host=$hostname;port=3308";
    $dbh = DBI->connect($dsn, $login, $mdp) or die "Echec connexion";
     
    $query = "SET NAMES 'UTF8'";
    $sth1 = $dbh->prepare($query);
     
    $sth1->execute();
    $sth1 -> finish;
    $chaine = "80536434, 'Lexique.Arbitrage', 'Arbitrage', 'Arbitrage', '', 'fr', 0, '2008-04-15 18:48:14', '2008-04-15 18:48:14', '2008-04-15 18:48:14', 'XWiki.Root', 'XWiki.Root', 'XWiki.Root', 'Lexique', '1 Arbitrage
     
    Changer le FCPE choisi pour son épargne est possible suivant l''évolution du marché mobilier. Par exemple : quitter un FCPE exposé pour un FCPE équilibré ou l''inverse. Les frais de transfert sont de 2 € par opération.
     
    Source : [Glossaire Systalians>http://10.67.92.110:8080/xwiki/bin/download/Lexique/WebHome/GlossaireSystalians.xls]', '1.1', '', 'WebHome', '', 2, '', '', '', b'0'";
    $chaine = Encode::encode("utf8", $chaine);
    $requete = "INSERT INTO xwikidoc VALUES(".$chaine.")";
    $sth = $dbh->prepare($requete);
    $sth->execute();
     
    $sth -> finish;
    $dbh -> disconnect;
    et voila l'erreur levée :
    DBD::mysqlPP::st execute failed: #HY000Incorrect string value: '\xC2\x80 par...'
    for column 'XWD_CONTENT' at row 1 at test_sql.pl line 31.
    Ma config :
    Windows 2003 Server
    MySQL Server 5.0
    ActivePerl 5.10

    Si quelqu'un à une solution je suis preneur.

    Merci d'avance.

    Thundara

  2. #2
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 2
    Points : 2
    Points
    2
    Par défaut insertion dans mysql
    Je vais peut etre dire des betises sachant que ma reponse n'a rien a voir avec l'encodage UTF8, mais Je penses que l'erreur pourrait venir de la :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $chaine = "80536434, 'Lexique.Arbitrage', 'Arbitrage', 'Arbitrage', '', 'fr', 0, '2008-04-15 18:48:14', '2008-04-15 18:48:14', '2008-04-15 18:48:14', 'XWiki.Root', 'XWiki.Root', 'XWiki.Root', 'Lexique', '1 Arbitrage
     
    Changer le FCPE choisi pour son épargne est possible suivant l''évolution du marché mobilier. Par exemple : quitter un FCPE exposé pour un FCPE équilibré ou l''inverse. Les frais de transfert sont de 2 € par opération.
     
    Source : [Glossaire Systalians>http://10.67.92.110:8080/xwiki/bin/d...ystalians.xls]', '1.1', '', 'WebHome', '', 2, '', '', '', b'0'";

    Personnellement J'utilises souvant ce genre de double quote lors d'une insertion dans mysql :

    my $data=$dbh->quote($data);
    my $sth=$dbh->prepare(qq{insert into table () values ($data)});

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2008
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Le problème ne vient pas de la gyclon car si j'enléve le symbole € la requête est accepté et pour le dernier champ : b'0' ce n'est pas un champ en VARCHAR mais en BIT(1) d'où la syntaxe b'0'

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Je ne sais pas quel est le problème exact, mais déjà, je te recommenderais d'utiliser les placeholders (consulte la doc DBI), c'est à la fois plus propre, plus sûr et plus efficace.

    Concernant ton problème d'encodage, as-tu essayé sans le encode ?

    --
    Jedaï

Discussions similaires

  1. Réponses: 10
    Dernier message: 04/11/2013, 14h21
  2. Réponses: 2
    Dernier message: 20/09/2011, 09h58
  3. Réponses: 6
    Dernier message: 14/12/2007, 23h26
  4. Caractères spéciaux dans les noms de variables POST
    Par guidav dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/09/2007, 13h36
  5. Comment résoudre les apostrophes dans les requêtes SQL ?
    Par Chatbour dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 03/07/2007, 16h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo