Simultané de plusieurs connexions de base de données dans drupal 7
Je suis en train d'écrire une classe wrapper pour mon site drupal 7 site qui me permet de vous connecter et d'interroger ma base de données phpbb.
Lors de la connexion à une source de données externe (comme par drupal documentation) vous avez défini le db active, exécutez la requête, puis définissez l'actif db à la valeur par défaut.
par exemple
db_set_active('phpbb');
$result = db_query($sql,$args,$opts);
db_set_active();//back to default
Mais est-il possible d'utiliser drupal de base de données wrapper pour créer une nouvelle marque de connexion qui peut être définie de façon permanente à la nouvelle base de données sans avoir à faire des allers-et-retours non-sens? certes, nous pouvons prendre en charge les connexions à plusieurs bases de données simultanément.
J'ai fait quelques recherches sur google mais je n'ai pas trouvé quelqu'un d'essayer de le faire encore.
OriginalL'auteur thtas | 2011-01-29
Vous devez vous connecter pour publier un commentaire.
Typique. 5 minutes après l'affichage je l'ai trouver... donc, à l'avenir, les googlers:
Fondamentalement, vous n'utilisez pas db_query, au lieu d'exécuter la requête sur votre connexion sans établir le lien actif.
vous pouvez le deviner en regardant comment db_query œuvres:
http://api.drupal.org/api/drupal/includes--database--database.inc/function/db_query/7
De sorte qu'il ressemble à ceci:
Cela suppose que vous avez une base de données configurée dans votre settings.php comme suit:
$phpbb = Database::getConnection($target='default', key='phpbb');
c'est une erreur que je vois de temps en temps et je suis à une perte comment peut-on arriver à un tel code. Ce que tu voulais est$phpbb = Database::getConnection('default', 'phpbb');
la seule raison que votre code a fonctionné, c'est que l'expression$target = 'default'
évalue àdefault
cependant la variable$target
dans le de l'appelant des changements de périmètre de'default'
qui n'est probablement pas indended.Accord - Réponse mis à jour 🙂
Soupir.Vous avez toujours voulu
$phpbb = Database::getConnection('default', 'phpbb');
. Ces variables sont toujours inutiles.OriginalL'auteur thtas
Base de données::addConnectionInfo() peut-être?
OriginalL'auteur Fonant
La définition de getConnection cites un ordre différent pour les arguments que ci-dessus.
C'est hélas différente à partir de la Base de données::addConnectionInfo() qui est
Aussi, sur DB_select, la touche $n'est pas un paramètre, mais il est dans le tableau options:
tout
donc, cela implique que le "maître" ou "esclave" ou "par défaut" est toujours utilisé comme jeu, mais pas la clé de la base de données de remplacement/schéma, nécessitant la db_set_active('...'); et db_set_active(); autour de la db_select.
Depuis les appels vers d'autres dbs peut facilement être nécessaire dans le traitement de la db_select (comme devel appels ou les appels en modifie), c'est inflexible de la conception. Modification de cet appel:
pour ajouter la Touche de paramètre (c'est déjà spécifié comme argument!!) est nécessaire, mais pas suffisant, pour autant que je peux voir maintenant.
OriginalL'auteur user27998