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 :

perl requete pg


Sujet :

SGBD Perl

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Points : 55
    Points
    55
    Par défaut perl requete pg
    bonjour je commence juste a etudier perl et j'ai un soucis quelque pars mais impossible de voir ou !!

    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
     
     
    sub requete()
    {
    $requete ="select domainenom from domainecoord where domainenom ='$nomdom';";
     
    #prépare la requête sql
      $req = $dbh->prepare($requete);
     
      #exécution de la requête sql
      $req-> execute() || die "probleme";
     
      while(($nomdomaine)=$req -> fetchrow_array)
     
      {
      print "$nomdomaine\n"; 
     
      } 
    }
     
     
    $res = requete();
     
    #condition
    if  ($res == '')
    {
    print"ce nom de domaine n'existe pas \n";	
    }
    else
     
    {
    print"ce nom de domaine existe\n";
    }

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : France, Territoire de Belfort (Franche Comté)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 64
    Points : 75
    Points
    75
    Par défaut
    même pas un message d'erreur, un indice ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Points : 55
    Points
    55
    Par défaut
    non rien du tout ...le probleme je croit vient la requette car elle doit retourner une chaine de caractere ou rien...Et elle retourne 1 ou 0

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Points : 47
    Points
    47
    Par défaut
    Hello,

    Gasp, tu commence effectivement à étudier perl

    Ta fonction 'requete' ne retournera jamais rien. Elle fait un print des résultats de ta requête, mais si ta variable '$nomdom' n'est pas initialisée, autant dire qu'il n'y aura même pas d'affichage.
    Le seul moyen pour une fonction de retourner une valeur (scalaire ou autre) est d'employer le mot-clé 'return'.

    De plus, la comparaison de chaine de caractères se fait avec l'opérateur 'eq' et non '=='.

    Essaye plutôt ceci:
    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
     
      sub requete() {
        my ( $nomdom ) = @_;
     
        $requete ="select domainenom from domainecoord where domainenom ='" . $nomdom . "'";
     
        # Prépare la requête sql
        $req = $dbh->prepare($requete);
     
        # Exécution de la requête sql
        $req->execute() || die "probleme";
     
        return $req->fetchrow_array;
    }
     
    $res = requete("www.developpez.net"); # non-non, pas chauvin :)
     
    #condition
    if  ( $res eq '' ) {
      print "ce nom de domaine n'existe pas\n";	
    } else {
      print "ce nom de domaine existe\n";
    }
    Dis moi si les résultats sont plus probants

    PluX59

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Points : 55
    Points
    55
    Par défaut
    non ca fonctionne pas
    j'ai oublier de dire que $nomdom jle récuperai comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    print "Entrer un nom de domaine";
    my $nomdom = <STDIN>;
    donc est ce que je dois mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $res = requete($nomdom);

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Points : 47
    Points
    47
    Par défaut
    Re,

    Si tu utilises le code que je t'ai indiqué plus haut, la réponse est oui.

    Essaye de mettre des print/printf un peu partout pour vérifier le contenu des variables:
    - '$nomdom', '$requete' et la valeur lue avec la commande '$req->fetchrow_array' dans la fonction 'requete',
    - la valeur retournée par la fonction 'requete'...

    Enfin, essaye de récupérer le maximum d'informations... Et indique le tout: code modifié, valeur donnée en entrée standard, méthode d'appel de ton script perl, trace...

    Plus il y'a d'informations, plus ça va vite à résoudre

    PluX59

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Points : 55
    Points
    55
    Par défaut
    Ok ...ma journée se termine , on en reparle lundi

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 158
    Points : 55
    Points
    55
    Par défaut
    Voici le code avec le message d'erreur

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     
    # demander une saisie
     
    print "Entrer un nom ";
    my $nomdo = <STDIN>;
     
     
     
    #on va chercher dans /usr/local/sbin une liste d'erreur dans une page
    require "parametrage.pl";
     
    $db_host = 'serint2.interne.observatoiredesmarques.fr';
     
    ## Connect to Database
    unless ( $dbh = DBI->connect( "DBI:$db_type:dbname=$db_name;host=$db_host", $db_user, $db_passwd ) ) {
    	commun_facturation_renouvellement::exit_erreur("Can't connect to Database");
    }
     
     
       my ( $nomdom ) = "$nomdo";
     
     
        $requete ="select nom from domaine where nom ='" . $nomdom . "'";
     
      #prépare la requête sql
      $version = $dbh -> prepare($requete);
     
     
      #exécution de la requête sql
      $version-> execute() || die "probleme";
     
      return $version->fetchrow_array;
     
      print "$version";
     
    $res = requete(); 
     
     
    #condition
    if  ( $res eq '' ) {
      print "ce nom n'existe pas\n";	
    } else {
      print "ce nom existe\n";
    }
    et le message d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Entrer un nom de domaine toto
    Can't return outside a subroutine at /home/alexandre/workspace/relance/Cron_example2.pl line 45, <STDIN> line 1.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Points : 47
    Points
    47
    Par défaut
    Hugh,

    Il te manque des trucs dans ton code pour que ça fonctionne...

    Le mot-clé 'return' ne peut être utilisé que dans le corps d'une fonction (déclarée par sub <nom_fonction> { <code> }), et là... point de fonction déclarée. C'est ce que t'indique le message d'erreur

    Ensuite il faut virer le retour chariot de la saisie effectuée, sinon ta requête ne retournera jamais de résultat (sauf si les noms de domaines sont stockés en base avec un retour chariot à la fin).

    Pour faire rapide, je te suggère le code 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    # demander une saisie
     
    print "Entrer un nom ";
    my $nomdo = <STDIN>;
     
    # On vire le retour chariot
    $nomdo =~ s/(\r|\n)//g; # Similaire à chomp($nomdo), que je n'aime pas
     
    #on va chercher dans /usr/local/sbin une liste d'erreur dans une page
    require "parametrage.pl";
     
    $db_host = 'serint2.interne.observatoiredesmarques.fr';
     
    ## Connect to Database
    unless ( $dbh = DBI->connect("DBI:$db_type:dbname=$db_name;host=$db_host", $db_user, $db_passwd ) ) {
    	commun_facturation_renouvellement::exit_erreur("Can't connect to Database");
    }
     
    # Pas besoin de cette ligne
    #   my ( $nomdom ) = "$nomdo";
     
    # Ici, on remplace '$nomdom' par '$nomdo'...
    $requete ="select nom from domaine where nom ='" . $nomdo . "'";
     
    #prépare la requête sql
    $version = $dbh -> prepare($requete);
     
    #exécution de la requête sql
    $version-> execute() || die "probleme";
     
    # On zappe toutes les lignes suivantes...
    #  return $version->fetchrow_array;
    #  print "$version";
    #$res = requete();
     
    # Pour ne mettre que celle-ci...
    $res = $version->fetchrow_array;
     
    if ( ! defined($res) ) {
      printf("Probleme de recherche du domaine %s en base...\n", $nomdo);
    } else {
      #condition
      if  ( $res eq '' ) {
        print "ce nom n'existe pas\n";	
      } else {
        print "ce nom existe\n";
      }
    }
    Dis moi ce que ça donne

    PluX59

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Points : 47
    Points
    47
    Par défaut
    Re,

    Alors, t'as testé ou non ? Ca fonctionne ou pas ?

    Dans l'attente...

    PluX59
    PS: marie4449, nettoie tes messages privés: ton quota est explosé

  11. #11
    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
    Citation Envoyé par PluX59
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    # On vire le retour chariot
    $nomdo =~ s/(\r|\n)//g; # Similaire à chomp($nomdo), que je n'aime pas
    Pourquoi tant de haine ? Par ailleurs ceci n'est pas similaire à chomp() parce que chomp() ne supprime les (\r|\n) qu'en fin de string.

    --
    Jedaï

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 42
    Points : 47
    Points
    47
    Par défaut
    Hello Jedai,

    J'ai déjà eu des déboires avec 'chomp' sur des scripts Unix/Linux/Win32 (surtout pour le /r)... Au début je n'y croyais pas trop mais à force...

    On peut faire ceci pour que ne virer que ceux qui sont en fin de chaine ():
    Je ne t'apprends rien

    Ceci étant, on lit des chaines parfois tellement mal formatées (fichier Unix/Linux sous Win32 par exemple )

    PluX59

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. requete SQL dans script Perl
    Par parisien91 dans le forum SGBD
    Réponses: 2
    Dernier message: 27/05/2008, 15h11
  2. perl plus requete sql
    Par bakka dans le forum SGBD
    Réponses: 5
    Dernier message: 20/07/2007, 17h58
  3. [web] Requetes HTTP en perl
    Par siemens dans le forum Web
    Réponses: 4
    Dernier message: 13/11/2006, 13h37
  4. Probleme avec une requete MySQL en perl
    Par Jim_Nastiq dans le forum SGBD
    Réponses: 3
    Dernier message: 14/04/2006, 09h42
  5. [sgbd]Optimisation des requetes Oracle/Perl
    Par linou dans le forum SGBD
    Réponses: 7
    Dernier message: 30/06/2005, 18h09

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