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

Symfony PHP Discussion :

[sf 1.4.x]connexion base de données


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 17
    Par défaut [sf 1.4.x]connexion base de données
    Bonjour à tous,

    Je voudrais savoir si quelqu'un sait comment gérer des connexions multiples à des base de données avec symfony 1.4 + doctrine 1.2.

    En gros j'ai une base de données principale de mon application qui est en locale et une autre qui est sur un serveur externe.

    Pour celle qui est en externe je n'en ai besoin que pour faire appel à quelques procédures stockées. Je voudrais donc savoir si il était facilement possible de switcher de connexion.

    A noter que mes 2 connexions sont bien déclarées dans mon fichier database.yml

    Je sais que l'on peux procéder en faisant un truc du genre:

    $dbh = new PDO($dsn, $user, $password);
    $conn = Doctrine_Manager::connection($dbh);

    Mais je voudrais savoir si il n'y a pas une méthode plus propre du genre juste mettre en paramètre le nom de la connexion déclarée dans le database.yml

    Merci de votre aide.

  2. #2
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Est-ce que tu comptes définir des objets dans ton modèle sur les deux connections ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 17
    Par défaut
    salut mimi68,

    je n'ai pas besoin de générer des objets pour la base externe. je fais simplement des appels à des procédures stockées.

    J'ai trouvé une solution qui est de passé mes paramètres de connexion dans le fichier app.yaml de mon application:

    #app.yaml
    ext_auth_db:
    dsn: 'mssql:host=monserveur;dbname=mabdd'
    username: user
    password: pwd
    Et dans mon fichier je fais:
    //On sauvegrade le nom de l'ancienne connexion
    $oldConn = Doctrine_Manager::getInstance()->getCurrentConnection()->getName();

    $dsn = sfConfig::get('app_ext_auth_db_dsn');
    $db_user= sfConfig::get('app_ext_auth_db_username');
    $db_pass= sfConfig::get('app_ext_auth_db_password');
    $conn = Doctrine_Manager::connection(new PDO($dsn, $db_user, $db_pass));
    //Traitement....

    //On réinitialise la connexion de départ
    Doctrine_Manager::getInstance()->setCurrentConnection($oldConn);
    Bon je ne sais pas si c'est la meilleure solution, mais c'est la seule que j'ai trouvé qui parait assez propre.

    Par contre j'ai maintenant un souci pour appeler ma procédure stockée. J'ai une erreur sur le execute et je ne voit pas d'où cela vient. Est ce que tu aurais une idée?

    $conn = Doctrine_Manager::connection(new PDO($dsn, $db_user, $db_pass));
    $handle = $conn->getDBh();
    $stmt = $handle->prepare("CALL sp_Stored_Procedure(param1)");
    $param1= "TEST";
    $stmt->bindParam('param1', $param1, PDO: PARAM_STR, 20);
    $stmt->execute();

    ==> Erreur:
    SQLSTATE[HY000]: General error: 10007 Syntaxe incorrecte vers 'param1'

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Si tu utilises un schema.yml et doctrine (ou propel) tu peux définir plusieurs connection vers plusieurs bases différentes. Ce qui peut simplifier par automatisme total.

    Mais comment vont réagir des objets qui ne seront accessible que par des proc stock et comment les créer dans le schema.yml ?

    L'avantage serait de garder l'homogénéité des données.

    Si non, tu peux mettre tes liaisons dans database.yml et les récupérer dans ta configuration, en lien eu place de app, ce qui, au moins, garderait la philosophie du framework

    Je ne vois pas trop l'intérêt de switcher les connections anciennes nouvelles, tous les objets base accepte un paramètres connexion qui permet de préciser quel doit être la connexion à utiliser.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 17
    Par défaut
    le compte que j'utilise pour la connexion à cette base externe n'a accès qu'à certaines procédures stockées. Il n'a accès à aucune autre chose. Donc un build du schéma ne donnera rien.

    En ce qui concerne de mettre les données de connexion de cette BDD dans le database.yml, c'était déjà le cas, mais je ne parviens pas à les récupérer.

    all:
    externe:
    class: sfDoctrineDatabase
    param:
    dsn: 'mssql:host=monserveur;dbname=mabdd'
    username: user
    password: pwd
    local:
    class: sfDoctrineDatabase
    param:
    param:
    dsn: 'mssql:host=monserveur;dbname=mabdd'
    username: user
    password: pwd
    Comment spécifier à un objet base quel base de données utiliser?

    Merci de ton aide

  6. #6
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Pour la connexion sur plusieurs tables, utilise dans le database.yml plusieurs description (il me semble qu'une d'entre elle doit porter le nom de doctrine.

    Dans la description :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    user
      columns:
        ...
    paraautre
      connection: connectbis
      columns:
        ...
    Pour les procédures stockées, une rapide recherche m'a permis de trouver qu'il était possible d'utiliser des objets du modèle comme basés sur une procédure stockées. Des informations dans l'API de doctrine le laisse penser..

    Mais je n'ai rien trouver sur le "mais comment faire ce truc !". Donc il me semble possible de créer, manuellement des objets qui permettent de récupérer des données d'une procédure stockée presque aussi simplement qu'avec un objet modèle, mais il faut mettre les mains dans le cambouis.

Discussions similaires

  1. Connexion Base de Données
    Par Ordonnateur dans le forum Oracle
    Réponses: 2
    Dernier message: 02/11/2005, 10h24
  2. Réponses: 5
    Dernier message: 07/04/2005, 14h12
  3. [Tomcat][Oracle] connexion base de donnes debutant....
    Par yogz dans le forum Tomcat et TomEE
    Réponses: 8
    Dernier message: 16/07/2004, 13h32
  4. [XMLRAD] Connexion Base de données Informix
    Par clisson dans le forum XMLRAD
    Réponses: 3
    Dernier message: 14/01/2003, 13h46
  5. connexion base de donné
    Par saidi dans le forum MFC
    Réponses: 3
    Dernier message: 07/08/2002, 22h22

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