9

drupal 7 サイト用のラッパー クラスを作成しています。これにより、phpbb データベースに接続してクエリを実行できます。

外部データ ソースに接続する場合 (drupal のドキュメントに従って)、アクティブなデータベースを設定し、クエリを実行してから、アクティブなデータベースをデフォルトに戻します。

例えば

db_set_active('phpbb');
$result = db_query($sql,$args,$opts);                               
db_set_active();//back to default

しかし、drupal のデータベース ラッパーを使用して、このナンセンスな切り替えを行わなくても、新しいデータベースに永続的に設定できる新しい接続を作成する方法はありますか? 確かに、複数のデータベースへの接続を同時に処理できます。

私はいくつかのグーグルを行いましたが、これをやろうとしている人はまだ見つかりません。

4

3 に答える 3

12

典型的。投稿してから 5 分後、私はそれを理解しました...だから、将来のグーグル社員のために:

基本的に、db_query は使用しません。代わりに、アクティブなリンクを設定せずに接続でクエリを実行します。

db_query がどのように機能するかを調べることで、これを理解できます: http://api.drupal.org/api/drupal/includes--database--database.inc/function/db_query/7

したがって、次のようになります。

$target='default';
$key = 'phpbb';
$phpbb = Database::getConnection($target,$key);
$result = $phpbb->query($sql,$args,$opts);

これは、次のように settings.php でデータベースが構成されていることを前提としています。

$databases['phpbb']['default'] = array(
    'driver' => 'mysql',
    'database' => 'forum',
    'username' => 'username',
    'password' => 'password',
    'host' => 'mysql.host.com',
    'prefix' => 'phpbb3_'
);
于 2011-01-29T20:23:33.680 に答える
0

getConnection の定義は、上記で使用されたものとは異なる引数の順序を示しています。

function getConnection($target = 'default', $key = NULL)

これは悲しいことに Database::addConnectionInfo() とは異なります。

public static function addConnectionInfo($key, $target, $info)

また、DB_select では、$key は options 配列にありますが、パラメーターではありません。

function db_select($table, $alias = NULL, array $options = array()) {
  if (empty($options['target'])) {
    $options['target'] = 'default';
  }
  return Database::getConnection($options['target'])->select($table, $alias, $options);
}

その間

  final public static function getConnection($target = 'default', $key = NULL) {

したがって、これは、「マスター」または「スレーブ」または「デフォルト」が常にセットとして使用されることを意味しますが、代替データベース/スキーマへのキーではなく、db_set_active('...'); を必要とします。および db_set_active(); db_selectの周り。

db_select の処理内で他のデータベースへの呼び出しが簡単に必要になる可能性があるため (devel 呼び出しや alters での呼び出しなど)、これは柔軟性に欠ける設計です。この呼び出しの変更:

  return Database::getConnection($options['target'])->select($table, $alias, $options);

Key パラメーターを追加するには (既に引数として指定されています!!) 必要ですが、私が見る限り不十分です。

于 2014-06-08T16:51:57.927 に答える