Mehrere gleichzeitige Datenbank-verbindungen in drupal 7
Schreibe ich eine wrapper-Klasse für meine drupal 7 Website, die es mir erlaubt, Verbindung zu und Abfrage meiner phpbb-Datenbank.
Wenn eine Verbindung zu einer externen Datenquelle (wie in der drupal-Dokumentation) Sie haben die aktive db, führen Sie die Abfrage, dann legen Sie die aktive db auf den Standardwert zurück.
z.B.
db_set_active('phpbb');
$result = db_query($sql,$args,$opts);
db_set_active();//back to default
Aber gibt es eine Möglichkeit, die Verwendung von drupal-Datenbank-wrapper erstellen einer neuen connection, die dauerhaft auf die neue Datenbank, ohne dass man diesen Wechsel hin-und her-Quatsch? sicherlich können wir Griff mehrere verbindungen zu mehreren Datenbanken gleichzeitig.
Habe ich getan einige googeln aber nicht gefunden habe jemand versucht, das zu tun dieses noch.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Typisch. 5 Minuten nach der Buchung, die ich es herausfinden... also, für zukünftige Googler:
Im Grunde, die Sie nicht verwenden db_query, stattdessen führen Sie die Abfrage auf Ihre Verbindung, ohne den aktiven link.
können Sie dies herausfinden, indem Sie betrachten, wie db_query funktioniert:
http://api.drupal.org/api/drupal/includes--database--database.inc/function/db_query/7
Also es sieht wie folgt aus:
Dies setzt Voraus, Sie haben eine Datenbank, die in Ihrer settings.php wie die folgenden:
$phpbb = Database::getConnection($target='default', key='phpbb');
dies ist ein Fehler, die ich von Zeit zu Zeit sehen, und ich bin an einem Verlust, wie können die Leute kommen, um so einen code. Was Sie wollten, ist$phpbb = Database::getConnection('default', 'phpbb');
der einzige Grund, warum dein code funktioniert hat, ist, dass der Ausdruck$target = 'default'
ausgewertetdefault
jedoch die variable$target
im caller Umfang änderungen'default'
wahrscheinlich nicht bestimmte sein.$phpbb = Database::getConnection('default', 'phpbb');
. Die Variablen sind immer noch überflüssig.Datenbank::addConnectionInfo() vielleicht?
Die definition für getConnection zitiert eine andere Reihenfolge für Argumente, als die oben verwendet.
Ist dies leider anders aus der Datenbank::addConnectionInfo (), die
Auch, auf DB_select, der $key ist kein parameter, wenn es im Optionen-array:
während
so impliziert dies, dass der 'master' oder 'slave' oder 'default' wird immer als set, aber nicht die Taste, um die alternative Datenbank/schema, dass die db_set_active('...'); und db_set_active(); um die db_select.
Da die Anrufe zu anderen dbs kann leicht in der Verarbeitung der db_select (wie devel-Anrufe oder Anrufe in verändert), das ist unflexibel design. Das ändern dieser Bekanntmachung:
fügen Sie den Schlüssel Parameters (es ist schon geskilled als argument!!) ist notwendig aber nicht ausreichend so weit ich das jetzt sehen können.