Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour,
J'ai dans mon bootstrap :
$params = array ( 'host' => 'localhost', 'username' => 'root', 'password' => 'root', 'dbname' => 'bdd1' ); try { $db = Zend_Db::factory('PDO_MYSQL', $params); $db->getConnection(); Zend_Db_Table::setDefaultAdapter($db); Zend_Registry::set('db', $db); } catch (Zend_Db_Adapter_Exception $e) { echo $e->getMessage(); }
Maintenant je voudrais dans une autre partie de mon appli juste changer le nom de la bdd connectée sans toucher aux params (host, login, mdp), equivalent à mysql_select_db().
Quelque chose comme ça (dans l'esprit) :
$db = Zend_Registry::get('db'); "$db->selectdb('bdd2');"
Je ne trouve rien pour faire cela simplement.
Merci pour vos réponses.
Hors ligne
Pour moi, même PDO ne permet pas de faire cela. Un adapter correspond à une base, et non à un serveur de BDD. Tu peux développer ton propre Adapter pour MySQL sans PDO. Et là, tu auras accès à cette fonction mysql_select_db(). Je ne te le recommande pas cependant, car il y a un intérêt à utiliser une couche d'abstraction comme PDO. Il faudrait donc mieux que tu appréhendes le problème sous un autre angle.
Tu as justement une ressource MultiDb pour Zend_Application. Cela permet d'avoir accès à plusieurs bases dans une application.
Comme tu ne sembles pas utiliser Zend_Application, tu peux doubler ton code pour avoir une deuxième connexion, et tu la stockes avec une clé db2 par exemple dans le registre. Bien sûr, tu définis une seule instance en tant d'adapter par défaut.
Pour information, tu peux récupérer les paramètres de connexion avec la méthode Zend_Db_Adapter::getConfig() :
$config = Zend_Registry::get('db')->getConfig();
Hors ligne
Tout d'abord merci pour ta réponse.
J'utilise Zend Application, pour le reste de la config.
Etant le nombre de bdd à la fin (env 70), j'aurais voulu avoir une gestion à part des connections.
Merci pour la piste que tu m'as donnée.
Hors ligne
70 O_o Que fais-tu avec tout ça ? une sauvegarde d'hébergement ?
Qu'entends-tu par une gestion à part ? Tu peux lancer la connexion dans le controller qui t'intéresse, cela n'a pas nécessairement besoin d'être dans le bootstrap. Si non, tu peux faire un tableau avec les dbname, et tu boucles (comme ce que fait la ressource MultiDb au final).
Hors ligne