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 :

Besoin de précision pour module DBD::mysql


Sujet :

SGBD Perl

  1. #1
    Membre habitué Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Points : 129
    Points
    129
    Par défaut Besoin de précision pour module DBD::mysql
    Bonjour,

    j'utilise actuellement ce module pour communiquer avec ma base.

    Mes sources d'info sont la doc présente sur la CPAN.

    Mon objectif est simplement d'initializer une variables à l'aide de la valeur d'un attribut que j'extrais. Le problème ce que pour cette seul action, je me retrouve avec un bon paquet de ligne. J'ai essayé deux solutions (une qui marche l'autre pas)

    Le code fonctionnel est le suivant :

    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
     
    #!/usr/bin/env perl
     
    use DBI;
     
    my $b_RecupOccu = <<"SQL";
       select occurrence
       from Mr_occurrence
       where mr = ? 
       and url = ?
    SQL
     
    # fonctionne
    my $RecupOccu = $dbh->prepare($b_RecupOccu);
     
    $RecupOccu->execute ($mr, $url)
    	or die "blabla\n";
     
    # ce qui m'oblige à faire cela, et donc de passer par une var intermédiaire
    my $ref  = $RecupOccu->fetchrow_hashref();
    my $occurrence = $ref->{'occurrence'};
     
    $RecupOccu->finish();
    le non fonctionnel étant le suivant :

    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
     
     
    #!/usr/bin/env perl
     
    use DBI;
     
    my $b_RecupOccu = <<"SQL";
       select occurrence
       from Mr_occurrence
       where mr = ? 
       and url = ?
    SQL
     
    # indication pour recuperer directement le resultat ... n'a aucun effet
    my $RecupOccu = $dbh->prepare($b_RecupOccu,  {"mysql_use_result" => 1});
     
    $RecupOccu->execute ($mr, $url)
    	or die "blabla\n";
     
    # grâce au changement de la valeur pour mysql_use_result, j'aurais du pouvoir extraire la valeur ainsi,
    my $occurrence = $RecupOccu->{'occurrence'};
    # au lieu de ça j'écope d'un undef..
     
    $RecupOccu->finish();
    Ce code passe à l'interprétation, mais m'indique que $occurrence est à "unitialized", si je l'affiche par exemple.

    J'ai trouvé ces infos dans la section Statement handles de la doc CPAN
    http://search.cpan.org/dist/DBD-mysql/lib/DBD/mysql.pm

    Si quelqu'un pouvait donc m'éclairer. Merci

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771

  3. #3
    Membre habitué Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Points : 129
    Points
    129
    Par défaut
    Ton tuto reviens à mon bout de code fonctionnel, je cherche justement une autre façon d'extraire l'attibut pour éviter d'avoir à passer par cette var intermédiaire qu'est $ref. Un peu à la manière de mon deuxième bout de code.

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Je ne comprends pas ton problème, ta requête SQL te générer quel type de résultat, as tu un exemple de résultat ?
    Que souhaites tu avoir concrètement ?

  5. #5
    Membre habitué Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Points : 129
    Points
    129
    Par défaut
    Dans ce cas il s'agit d'un entier que je veux récupérer. Mais cela pourrait être applicable à n'importe quelle situation où l'on veut récupérer simple, sans passer par les méthodes fetch_* . Je recherche une méthode moins contraignante en quelque sorte.

    Méthode que je pensais avoir trouver sur la doc CPAN et dont un exemple est visible dans mon deuxième [ code ] et que je n'arrive pas à faire fonctionner.

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Je t'ai demandé un exemple de résultats de ta requête SQL.
    Je ne vois pas en quoi c'est une contrainte d'utiliser fetch_....
    J'ai besoin de savoir ce que tu as comme résultat et ce qui te pose souci.

    Si c'est juste parce que tu obtiens plusieurs ligne de résultat alors que tu n'en veux qu'une seul, tu peux utiliser select_row, ou même changer ta requête SQL en rajoutant la clause LIMIT, mais sans exemples, difficile de t'aider.

  7. #7
    Membre habitué Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Points : 129
    Points
    129
    Par défaut
    Le résultat est obligatoirement un int, un seul et unique int car la clef primaire est justement composée de url & mr.

    Mais ce n'est pas le problème. Je veux juste remplacer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    my $ref  = $RecupOccu->fetchrow_hashref();
    my $occurrence = $ref->{'occurrence'};
    par un hypothétique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my $occurrence = $RecupOccu->{'occurrence'};
    Soit récupérer une valeur (et non plusieurs) en une seul ligne.

  8. #8
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    241
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 241
    Points : 272
    Points
    272
    Par défaut
    Bonjour,

    et quelque chose de ce style ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    my $dbh = DBI->connect(...);
    my $query = 'SELECT * FROM table';
     
    foreach (values(%{$dbh->selectall_hashref($query,'col1')})) {
        print $_->{col1}.' - '.$_->{col2}."\n";
    }
    ou peut-etre en un peu moins compact ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    my $dbh = DBI->connect(...);
    my $query = 'SELECT * FROM table';
    my $result = $dbh->selectall_hashref($query,'col1');
    foreach (values(%$result)) {
        print $_->{col1}.' - '.$_->{col2}."\n";
    }
    et si tu n'as qu'une seule ligne à récupérer regarde du coté de selectrow_hashref

    Tout est dans la doc du CPAN
    Linux because rebooting is just for adding medias

Discussions similaires

  1. Besoin de précision pour un code
    Par emirej dans le forum Débuter
    Réponses: 2
    Dernier message: 01/04/2008, 09h34
  2. Besoin d'aide pour une requête MySQL
    Par plex dans le forum Requêtes
    Réponses: 7
    Dernier message: 09/12/2007, 22h35
  3. Re besoin de vous pour migration de mysql vers dsl server
    Par scaleo dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 07/11/2006, 13h45
  4. Besoin d'aide pour passage de mysql a sql server
    Par mobscene dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/12/2005, 07h55
  5. [VB.NET]Besoin de précision pour architecture 3-tiers
    Par Dnx dans le forum Windows Forms
    Réponses: 8
    Dernier message: 14/09/2005, 09h09

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