欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

Drupal7设置多个数据库连接

shiping1 的头像

Drupal7 如何连接到多个数据库

尽管数据库抽象层使得函数名更容易记住,也内置了安全查询。有时,我们需要连接到第三方或遗留的数据库,使用Drupal的数据库API即可满足这样的需求,也可获得安全查询的好处。例如,你的模块可以连接到非Drupal的数据库,并返回数据。


在settings.php文件,$databases是一个由多个数据库连接字符串组成的数组。
下面是单个连接的默认语法:

array(
    'driver' => 'mysql',
    'database' => 'databasename',
    'username' => 'username',
    'password' => 'password',
    'host' => 'localhost',
    'port' => 3306,
    'prefix' => 'myprefix_',
  );
 
作为一个例子,你可能有两个数据库,默认的数据库(在这个例子中假设为D7)和遗留的数据库。
 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
$databases = array (
  'default' => 
  array (
    'default' => 
    array (
      'driver' => 'mysql',
      'database' => 'd7',
      'username' => 'username',
      'password' => 'userpassword',
      'host' => 'localhost',
      'port' => '',
      'prefix' => '',
    ),
  ),
  'legacy' =>
  array (
    'default' =>
    array (
      'driver' => 'mysql',
      'database' => 'legacydatabase',
      'username' => 'legacyusername',
      'password' => 'legacyuserpassword',
      'host' => '122.185.22.1',
      'port' => '6060',
    ),  
  ),
);

注意:您的Drupal网站使用的数据库应始终使用 default作为键。

当您在Drupal中,要连接到其他数据库时,可以使用它的键名激活它;处理完成后要切换回默认的数据库连接:

// 从非 Drupal 数据库中获取数据
db_set_active('legacy'); 
$result = db_query("SELECT * FROM ldap_user WHERE uid = :uid", array(':uid' => $user->uid)); 
 
// 完成后切换为默认的连接 
db_set_active('default');

注意事项:当您切换到其他的数据库连接,尝试进行t(“text”)这样的操作时会导致错误。 t() 函数要求默认的数据库为激活状态。因此,一定要尽可能快地切换为默认的数据库连接,并特别注意在请求数据库开启时,不要调用代码。


由于数据库抽象层设计为不同的数据使用相同的函数名,因此多种类型的数据库(例如,MySQL和PostgreSQL)不能同时使用。然而,访问 http://drupal.org/node/19522 可以了解如休在一个网站中同时连接到MySQL和PostgreSQL。

来自 http://www.cuitu.net/book/drupalru-he-lian-jie-dao-duo-ge-shu-ju-ku


http://www.shipingzhong.cn/node/1142
来自 http://my.oschina.net/u/166228/blog/155582

http://m.oschina.net/blog/155582
普通分类: