logo

额外区块类型 (EBT) - 全新的布局构建器体验❗

额外区块类型 (EBT) - 样式化、可定制的区块类型:幻灯片、标签页、卡片、手风琴等更多类型。内置背景、DOM Box、JavaScript 插件的设置。立即体验布局构建的未来。

演示 EBT 模块 下载 EBT 模块

❗额外段落类型 (EPT) - 全新的 Paragraphs 体验

额外段落类型 (EPT) - 类似的基于 Paragraph 的模块集合。

演示 EPT 模块 滚动

滚动

在 Drupal 7 中操作数据库 - 第2课 - 数据库配置(Configuration)

14/10/2025, by Ivan

在 Drupal 中,定义数据库连接的主要方式是通过 settings.php 文件中的 $databases 数组。顾名思义,$databases 允许定义多个数据库连接,并且支持多目标配置(target)。数据库连接在第一次执行查询时才会被真正建立(即延迟加载)。

连接键(Connection Key)

连接键是数据库连接的唯一标识符。它在整个网站范围内必须唯一,并且必须为主数据库设置一个默认连接键。通常,大多数站点只会有一个默认连接。

连接目标(Connection Target)

每个连接可以包含一个或多个“目标(target)”。目标是一种可选机制,用于在可用时使用不同的数据库。若所请求的目标未定义,系统会自动回退到默认目标(“default”),而默认目标必须始终存在。

这种设计通常用于实现主从复制(master/slave replication)。默认情况下,查询会发送到主数据库(master)。但如果定义了一个或多个 “slave” 目标,那么标记为可在从库执行的查询将优先尝试使用从服务器。如果无法连接,则回退到主服务器。

$databases 数组语法

$databases 是一个三维嵌套数组。第一层是连接键,第二层是连接目标,第三层是具体的连接配置(如驱动、用户名、主机等)。下面是一个示例:

<?php
$databases['default']['default'] = array(
  'driver' => 'mysql',
  'database' => 'drupaldb',
  'username' => 'username',
  'password' => 'secret',
  'host' => 'localhost',
);
?>

上面的配置定义了一个名为 “default” 的数据库连接和目标(default/default)。它使用 MySQL 驱动,连接到本地主机(localhost)上的 “drupaldb” 数据库,使用用户名 “username” 和密码 “secret”。这是最常见的单数据库站点配置。

主从(Master/Slave)配置示例

<?php
$databases['default']['default'] = array(
  'driver' => 'mysql',
  'database' => 'drupaldb1',
  'username' => 'username',
  'password' => 'secret',
  'host' => 'dbserver1',
);
$databases['default']['slave'][] = array(
  'driver' => 'mysql',
  'database' => 'drupaldb2',
  'username' => 'username',
  'password' => 'secret',
  'host' => 'dbserver2',
);
$databases['default']['slave'][] = array(
  'driver' => 'mysql',
  'database' => 'drupaldb3',
  'username' => 'username',
  'password' => 'secret',
  'host' => 'dbserver3',
);
?>

该配置定义了一个主服务器(default)和两个从服务器(slave)。注意,slave 是一个数组,这意味着如果定义了多个从库,Drupal 会在每次页面加载时随机选择一个从库来执行查询。这意味着一次页面请求中的查询可能全部发往 dbserver2dbserver3

多数据库配置示例

<?php
$databases['default']['default'] = array(
  'driver' => 'mysql',
  'database' => 'drupaldb1',
  'username' => 'username',
  'password' => 'secret',
  'host' => 'dbserver1',
);
$databases['extra']['default'] = array(
  'driver' => 'sqlite',
  'database' => 'files/extradb.sqlite',
);
?>

此配置定义了一个主 Drupal MySQL 数据库和一个名为 “extra” 的附加 SQLite 数据库。请注意,SQLite 的连接信息结构与 MySQL 不同。每种数据库驱动都有自己特定的配置参数。

Drupal 支持任意数量的数据库连接,但不会自动建立连接,除非在代码中显式使用该数据库(例如使用 Database::getConnection('extra'))。

Drupal 7 需要 PDO 支持

Drupal 7 强制要求 PHP PDO 扩展。因此,你必须确保服务器启用了 PDO 扩展,或选择支持 PDO 的主机环境,否则 Drupal 将无法连接数据库。