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

Langage Perl Discussion :

Probleme tres etrange avec une requete...


Sujet :

Langage Perl

  1. #1
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut Probleme tres etrange avec une requete...
    je recuperais les titres de tout les champs auparavant sans probleme grace a la requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SHOW COLUMNS FROM table
    puis en utilisant le module DBI:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while (@title = $request_title->fetchrow_array)
    mais a présent que j'ai changé les types de certains champs il me renvoi dans mon tableau @title les noms de tout les champs mais avec cela des informations enigmatiques parsemé un peu partout :


    avant:

    champ1, champ2, champ3 ,......
    et maintenant j'ai donc des champs en plus bizarre de ce style(ces champs suplementaire ne sont pas present dans la base!):


    champ1 , champ2, YES, 0000-00-00 00:00:00, champ3 , 0000-00-00 00:00:00, champ4, YES, 0000-00-00 00:00:00,....
    est ce a cause du type TIMESTAMP ou un probleme en perl?

    merci de m'aider

  2. #2
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    je sais qu'il est tres simple de les supprimer en tenant compte de l'erreur dans mon script mais c'est plus par curiosité que je voudrais savoir la source du bug!

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    172
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 172
    Points : 208
    Points
    208
    Par défaut
    Salut,

    Citation Envoyé par Jim_Nastiq
    je sais qu'il est tres simple de les supprimer en tenant compte de l'erreur dans mon script mais c'est plus par curiosité que je voudrais savoir la source du bug!
    Je ne comprends pas. Il n'y a pas du bug, supprimes les erreurs de ton scripts.

    Bizarre qu'on demande un script avec des erreurs de fonctionner sans erreurs en disant que c'est un bug de Perl.

    lami20j

    P.S. Fait voir ton script s'il te plaît. Merci.

  4. #4
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    et bien dans ma BDD les champs que me retourne mon script n'existe pas tous! une partie est bonne mais certains champs comme YES, 0000-00-00 00:00:00, et CURRENT_TIMESTAMP n'existe pas dans ma BDD!

    et cette erreur est apparut depuis que j'ai changé le type de certaines données que j'ai passées de TEXT a TIMESTAMP ou de TEXT a TIME !

    donc je me demande s ce n'est pas le module DBI avec fetcharrow qui ferait ca

    et je disais qu'il est simple de solutionné ce probleme avec un "if" qui permet de virer les occurences bizarres, mais ce que je souhaite c'est savoir pourquoi j'ai ce bug...

    suis je assez clair? merci

  5. #5
    Mr6
    Mr6 est déconnecté
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    chez moi ton "show columns from table" est équivalent à un "desc table". Il me semble normal que tu récupères de telles valeurs, car tu as paramètres qui sont affectés par défaut en fonction des types de champs que tu as dans ta table. ce n'est pas du tout un bug mais une réponse logique.
    Si tu as un champ de type time, tu auras forcément dans la description du champ un "00:00:00" qui va trainer dans "Default" (en tout cas c'est ce que j'ai avec mysql ). Donc si tu n'affiches que $title[0] tu devrais n'avoir que ton titre, non ?

  6. #6
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    je suis pas sur d'avoir compris tes propos Mr 6 ! mais donc d'apres toi c'est normal d'apres ma requete de recuperer dans les columne les valeurs "differentes" de mes champs! mais a la fin tu me dis que si j'affiche @title je n'aurais que mes titres de champs?(est ce que j'ai bien compris ce que tu as dis???) si c'est le cas je te reponds non mon @titke contient justement ces valeurs c'est pourquoi j'utilise un if pour eviter qu'il ne les contienne

  7. #7
    Mr6
    Mr6 est déconnecté
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    non, je pense que @title récupère à peu près ca comme type d'infos :
    Field | Type | Null | Key | Default | Extra
    donc $title[0] doit contenir "Field", soit le titre de ton champ.

  8. #8
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    oui donc il faut que je filtre si je ne veux avoir que les titres dans le tableau title

    on va y arriver

    merci de ton aide

  9. #9
    Mr6
    Mr6 est déconnecté
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    si tu veux, mais ca ne sert à rien de tester ce que tu récupères :

    use strict;
    use DBI;

    my $source = "DBI:mysql:ma_base";
    my $login = "login";
    my $pass = "pass";

    my $dbh = DBI->connect($source, $login, $pass);


    my $sth_description = action_db("desc ma_table");
    while (my @title = $sth_description->fetchrow_array) {
    print "$title[0]\n";
    }

    sub action_db {
    my $action = $_[0];
    my $sth = $dbh->prepare("$action");
    die "Error width $action : " . $sth->errstr . "\n" if (!$sth);
    die "Error width $action : " . $sth->errstr . "\n" if (!$sth->execute);
    return $sth;
    }
    ou si tu as pris le temps de lire comment fonctionne fetchrow_hashref, tu peux utiliser ca :
    while (my $title = $sth_description->fetchrow_hashref) {
    print "$title->{'Field'}\n";
    }

  10. #10
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    oui mais ton code :
    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
    use strict;
    use DBI;
     
    my $source = "DBI:mysql:ma_base";
    my $login = "login";
    my $pass = "pass";
     
    my $dbh = DBI->connect($source, $login, $pass);
     
     
    my $sth_description = action_db("desc ma_table");
    while (my @title = $sth->fetchrow_array) {
    print "$title[0]\n";
    }
     
    sub action_db {
    my $action = $_[0];
    my $sth = $dbh->prepare("$action");
    die "Error width $action : " . $sth->errstr . "\n" if (!$sth);
    die "Error width $action : " . $sth->errstr . "\n" if (!$sth->execute);
    return $sth;
    }

    ca renvoi dans @title tout les champs avec leurs titres, types,... alors que moi je ne veux que les titres...

    il faut donc que je filtre, non? est ce que tu comprends ce que je veux dire? ou alors c'est moi qui comprends pas ce que tu essai de me dire

  11. #11
    Mr6
    Mr6 est déconnecté
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    as-tu testé le code que je t'ai mis ? pourquoi me parles-tu de @title alors que je te dis de n'en regarder que le 1er élément ?
    as-tu testé la version avec fetchrow_hashref ?

  12. #12
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    oui j'ai testé ton code et je crois qu'il met en lumiere un probleme dans mon code! encore une fois il y a un bout de code que je comprends mal

    voici mon code pour recuperer les titres :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while (@title = $request_title->fetchrow_array)  { 
     foreach my $t (@title )
     {
         $array_title[$i] = $t;
         $i++;
     }
    }
    donc mon probleme c'est comment utiliser cette boucle parce que j'ai pas l'air d'avoir compris , le while est bien enigmatique pour moi ! je pense comprendre que tant que le fetchrowarray renvoie qq chose on le met dans le tableau title!
    Ensuite pour recuperer les titres comment faire avec ce que tu me dit: title[0]??? car il ne contient que le titre du 1er champ!


    PS: le nouveau forum est lent,non?

  13. #13
    Mr6
    Mr6 est déconnecté
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    forcément, tu ne risquais pas de comprendre....
    Je t'explique :
    quand tu lances une requête SQL, tu peux avoir 1 ou plusieurs champs à demander (genre tu ne veux que l'id tu fais un "select id from table", ou tu veux tout tu fais un "select * from table").
    Suite à celà, si à la fin de ta requête tu mets la condition "limit 1" tu n'auras qu'une seule ligne de résultat, sinon, tu ne peux pas vraiment prévoir combien tu auras de lignes de résultats.
    Donc le
    while (@title = $request_title->fetchrow_array) {
    sert à dire "tant que j'ai des lignes de résultat, je remplis le tableau avec chaque élément de résultat demandé" (qui peut donc varier de 1 à * éléments !)
    Ton foreach ne sert donc à rien !

  14. #14
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    oui alors en fait c'est bien ce que j'avais compris en 1er lieu mais le trouble a été semé dans mon esprit par tout mes different test! a present cela focntionne correctement avec une methode que j'etais certains d'avoir testé ! merci pour ta patience ! je suis vraiment un boulet

  15. #15
    Mr6
    Mr6 est déconnecté
    Membre éclairé

    Homme Profil pro
    Inscrit en
    Septembre 2004
    Messages
    607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2004
    Messages : 607
    Points : 794
    Points
    794
    Par défaut
    alors prends plutôt ce smiley

    ok, je sors

  16. #16
    Membre expert
    Avatar de Jim_Nastiq
    Homme Profil pro
    Architecte, Expert Flex
    Inscrit en
    Avril 2006
    Messages
    2 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte, Expert Flex
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 335
    Points : 3 189
    Points
    3 189
    Par défaut
    Citation Envoyé par Mr6
    alors prends plutôt ce smiley


    Hey tu l'as eu ou cette photo de moi?

Discussions similaires

  1. Réponses: 3
    Dernier message: 06/11/2007, 11h18
  2. [weblogic 8.1][JDBC] Probleme avec une requete
    Par Sniper37 dans le forum Weblogic
    Réponses: 3
    Dernier message: 08/04/2005, 11h11
  3. probleme avec une requete full text
    Par maxxou dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/03/2005, 17h20
  4. Probleme d'execution d'une requete avec un Count
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 23/06/2004, 10h33
  5. au secour probleme avec une requete...
    Par soufiane59 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 26/09/2003, 10h28

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