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

PHP & Base de données Discussion :

connection de base de donnees dans une fonction php [PostgreSQL]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Points : 18
    Points
    18
    Par défaut connection de base de donnees dans une fonction php
    Bonjour,

    j'ai fait une connexion en utilisant pg_connect dans une fonction A
    mais lorsque je fait une requête dans une fonction B une erreur m'indique que j'ai pas de connexion, pour que ca marche il faut que je fait a nouveau la connexion dans la fonction B

    sachant que j'ai pas fermer la connexion

    je suppose que la connexion s'effectue que dans la fonction A un peu comme les variable local d'une fonction

    y'a t'il une solution pour que je fait la connexion une seule fois dans cette fonction A et non dans tous les fonctions ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    si tu précises la variable de connexion (d'ailleurs vu comment est foutu la fonction, je vois comment comment on peut l'ometre), il faut la passer comme argument d'une fonction a l'autre ou bien la déclarer global.

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Autre solution: en appelant pg_query("SELECT ....") sans préciser aucune connexion, ça utilise automatiquement la connexion dite par défaut c.a.d la dernière qu'on a ouverte, qu'on soit dans la même fonction ou pas.

    Voir http://php.net/manual/fr/function.pg-query.php

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    Bonjour a tous,
    dabord merci de votre reponse
    j'ai essayer de faire une requete pg_query("select....")
    mais ca donne le meme erreur

    je passe le nom de serveur comme parametre pour la fonction
    et je fait ensuit la connection:

    $connection = pg_connect($conn_string);

    si je declare $connection comme variable Global ca marche pas aussi

    avez vous une autre solution svp comment ouvrir une connection dans une fonction et pouvoir l'utiliser dans tout le script?

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Citation Envoyé par STunisino Voir le message
    Bonjour a tous,

    j'ai essayer de faire une requete pg_query("select....")
    mais ca donne le meme erreur
    Est-ce que le pg_query est bien exécuté après le pg_connect() et quel est le message d'erreur?

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    oui juste après que j'ai fait appel a la fonction A qui fait la connection
    j'ai fait un pg_query dans la deuxième fonction
    mais il m'indique que j'ai pas de connections
    alors que tous les requête dans la fonction "A" marche
    mais par contre pas dans la fonction "B"

  7. #7
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Dans ce cas montre nous le code de la fonction B

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    voila les deux fonction A et B en bref :
    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
    function A($serveur)
    {
    $reponse = new xajaxResponse();
     
     
    	$port = "5432"; 
    	$base = "listesbases"; 
    	$user = "postgres"; 
    	$pwd = "passwd"; 
     
    	$conn_string = "host='$serveur' port=$port dbname=$base user=$user password=$pwd"; 
    	pg_connect($conn_string);
     
    	$req_bases = "select nombase from basesutilisateurs";
    	$result_bases = pg_query($req_bases);
            ///// ensuite traitement des resultats qui marche tres bien
     
    return $reponse;
     
    }
     
     
    function B($nom)
    {
            $req_user = "select nombase from basesutilisateurs where superutilisateur = '$nom' ";
    	$result_user = pg_query($req_user);
            ///// ici une erreur s'affiche qui m'indique que j'ai plu de connection POSTGRES (Warning: pg_query() [function.pg-query]: No PostgreSQL link opened yet in D:\login.php)
    }

  9. #9
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonjour,

    Tu devrais passer la connexion dans l'argument de la fonction B ex $conn avec $conn = pg_connect( ...);

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    En soi, le code que tu as montré fonctionne, à supposer que la fonction B soit appelée dans la même exécution du script après la fonction A.
    Mais à mon avis ce n'est pas comme ça qu'elle est appelée, je soupçonne que tu es dans un contexte Ajax où le script est appelé 2 fois séparément, une fois pour la fct A, l'autre pour la fct B. Dans ce cas en effet la 2ème exécution ne peut utiliser une connexion ouverte par la 1ere.

  11. #11
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    c'est exactement le cas estofilo
    j'utilise ajax et la fonction A sera appele lorsque le client clique sur un bouton
    et la fonction B de meme
    le client ne peut pas appler B en premier il faut passer par A
    c'est pour ca que j'ai fait la connection dans A

    mais ec ce qu'il ya vraiment pas de solution pour faire une connection a une base de données une seule(global) fois a travers une fonction ?

    merci pour ta suggestion Fench mais ca marche pas aussi
    j'ai meme essayer avec les variable de session

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    La réutilisation d'une connexion entre des exécutions différentes d'un script php n'est possible qu'avec un gestionnaire de pool de connexions. Il y a pg_pconnect intégré à php qui fait un peu ça, et sinon des outils externes genre pgpool.

  13. #13
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Points : 18
    Points
    18
    Par défaut
    ok je vais voir coté pg_pconnect
    merci de vos reponses

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

Discussions similaires

  1. connection a une base de donnée dans une fonction
    Par Xeuch dans le forum Langage
    Réponses: 3
    Dernier message: 20/03/2013, 11h48
  2. [MySQL] librairie - exporter base de donnees dans une feuille excel ?
    Par juju03 dans le forum PHP & Base de données
    Réponses: 28
    Dernier message: 30/07/2008, 14h45
  3. comment editer les donnee d'une base de donnees dans une application xbap?
    Par sanaaafkir dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 19/05/2008, 16h26
  4. Afficher une image de la base de données dans une jsp
    Par treivse dans le forum Struts 1
    Réponses: 1
    Dernier message: 26/06/2006, 09h38
  5. [HIBERNATE] lier 2 bases de données dans une même table
    Par bondarenko dans le forum Hibernate
    Réponses: 4
    Dernier message: 31/03/2006, 16h01

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