如何配置Drupal数据库信息?

Drupal的数据库连接信息通过文件settings.php中的变量$databases设置。变量$databases是一个二维的数组,第一维称为key,第二维称为target。使用这种方式可以处理多数据库和主从分离这样复杂的情况。

例如,假设有这样的配置:

$databases['default']['default'] = array(
  'database' => 'drupal',
);
$databases['default']['slave1'] = array(
  'database' => 'slave1',
);
$databases['default']['slave2'] = array(
  'database' => 'slave2',
);

$databases['erp']['default'] = array(
  'database' => 'erp',
);

$databases['oa']['default'] = array(
  'database' => 'oa',
);

默认的key是default,默认的target是default,因此大多数情况可以这样查询:

$result = db_query('SELECT * FROM node'); // drupal数据库

如果需要在指定的target中执行查询,可以这样:

$result = db_query('SELECT * FROM node', null, array('target' => 'slave1'));
$result = db_query('SELECT * FROM node', null, array('target' => 'slave2'));

如果需要在指定的key中执行查询,可以这样:

Database::setActiveConnection('erp');
$result = db_query('SELECT * FROM erp_user');

有多个从数据库时,也可以这样配置:

$databases['default']['slave'][] = array(
  'database' => 'slave1',
);
$databases['default']['slave'][] = array(
  'database' => 'slave2',
);
$databases['default']['slave'][] = array(
  'database' => 'slave3',
);

如果需要在slave中执行查询,就这样写:

$result = db_query('SELECT * FROM node', null, array('target' => 'slave'));

Drupal遇到这种情况,会随机地从三台从数据库中选择一台。当然,在同一个PHP会话中这个连接是固定的,不同的PHP会话有可能不同。

原文地址:https://www.cnblogs.com/eastson/p/3336313.html