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

Zend Framework PHP Discussion :

ouverture de connexion sous Zend_Application_Resource_Multidb


Sujet :

Zend Framework PHP

  1. #1
    Membre confirmé
    Avatar de Jcpan
    Inscrit en
    Août 2008
    Messages
    542
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 542
    Points : 475
    Points
    475
    Par défaut ouverture de connexion sous Zend_Application_Resource_Multidb
    Bonjour

    en utilisant le plugin Zend_Application_Resource_Multidb pour paramétrer de multiples connexions vers des bases de données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [production]
    resources.multidb.db1.adapter = "pdo_mysql"
    resources.multidb.db1.host = "localhost"
    resources.multidb.db1.username = "webuser"
    resources.multidb.db1.password = "XXXX"
    resources.multidb.db1.dbname = "db1"
     
    resources.multidb.db2.adapter = "pdo_pgsql"
    resources.multidb.db2.host = "example.com"
    resources.multidb.db2.username = "dba"
    resources.multidb.db2.password = "notthatpublic"
    resources.multidb.db2.dbname = "db2"
    resources.multidb.db2.default = true

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $resource = $bootstrap->getPluginResource('multidb');
    $db1 = $resource->getDb('db1');
    $db2 = $resource->getDb('db2');
    $defaultDb = $resource->getDb();
    Est ce qu'on ouvre les deux connexion à chaque appel sinon comment faire pour choisir une table dont le nom existe dans les deux bases ?

    Merci d'avance

  2. #2
    En attente de confirmation mail

    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2003
    Messages
    253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2003
    Messages : 253
    Points : 637
    Points
    637
    Par défaut
    Hello,

    Pour ce qui est de la première question, à savoir est-ce qu'à chaque appel les deux connexions seront ouvertes, la réponse est non.

    L'appel à Zend_Db::factory() ne suffit pas à ouvrir la connexion à la base, ça se produira quand tu effectueras la première requête sur l'objet Zend_Db_Adapter, ou bien si tu utilises la méthode getConnection();

    En gros, si tu fais aucune requête, aucune connexion ne sera effectuée à la base.

    C'est expliqué ici : http://framework.zend.com/manual/en/...b.adapter.html

    Pour la deuxième question, j'avoue ne pas bien saisir le problème ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2010
    Messages : 118
    Points : 184
    Points
    184
    Par défaut
    Bonjour,

    Concernant,

    Est ce qu'on ouvre les deux connexion à chaque appel sinon comment faire pour choisir une table dont le nom existe dans les deux bases ?
    Je pense que tu cherches à choisir l'une ou l'autre des base de données (schema).
    Je ne sais pas si cela peux te convenir, mais voilà une façon de faire :

    Au niveau du bootstrap je réalise une connexion getConnection() à toutes mes bases pour tester si j'ai accès avant toutes requêtes, tout en propageant mon Zend_Db de ma base dans un registre.
    Par exemple ci-dessous pour ma deuxième base de données.

    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
     
    try {
            // fournit les paramètres de connexion à Zend_Db
            $db2 = Zend_Db::factory(new Zend_Config_Ini($confPath . 'config.ini', $this->_env)->db2);
    	// Réalise une connexion à la base de données pour contrôle
     	$db2->getConnection();
    	// Tous les résultats des requêtes seront sous forme d'objet
    	$db2->setFetchMode(Zend_Db::FETCH_OBJ);
     
        	// Propage mon Zend_db dans un registre
            $this->_registry->db2 = $db2;
     
    // Jeu d'exception
    } catch (Zend_Db_Adapter_Exception $e) {
    	die ("Probablement mauvais identifiants,ou alors le SGBD n'est pas joignable: ".$e->getMessage());
    } catch (Zend_Exception $e){
    	die("factory() n'a pas réussi à charger la classe de l'adaptateur demandé : ".$e->getMessage());
    }
    Lorsque je fais appel à un modèle de table pour une base de données spécifiques

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     // Appel de ma table de ma base 'DB2'
            $TTables = new TTables('db' => Zend_Registry::get('db2)));

    Au niveau de mon modèle de table

    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
     
    class TTables extends Zend_Db_Table_Abstract
    {
     
        /**
         * Nom de la base de données 
         */
        protected $_schema = 'DB2';
     
        /**
         * Nom de la table
         */
        protected $_name = 'matable';
     
        /**
         * Nom de la clé primaire
         */
         protected $_primary = 'macleprimaire';
     
    }
    Au niveau de requête il faut parfois forcer le choix de la base de données

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $sql = "SELECT * FROM matable";
    return $this->getAdapter('db2')->fetchAll($sql);
    Une solution parmi d'autres.
    Apprendre c'est se faciliter la vie !
    http://e-tuto.fr

Discussions similaires

  1. Problème de connexion sous eclipse
    Par noutnout53 dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 01/03/2006, 09h44
  2. connexion sous MS-dos
    Par electro-asm dans le forum Administration
    Réponses: 11
    Dernier message: 26/02/2006, 07h53
  3. Probléme d'ouverture de session sous Windows 2000 server
    Par Orameur dans le forum Windows XP
    Réponses: 1
    Dernier message: 25/02/2006, 19h15
  4. Pb Ouverture de formulaire sous condition.
    Par Phl98 dans le forum Access
    Réponses: 8
    Dernier message: 03/11/2005, 22h28
  5. Ouverture de connexion et envoi d'un message par socket
    Par loleske dans le forum C++Builder
    Réponses: 3
    Dernier message: 10/02/2005, 12h52

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