在Drupal 中连接多个数据库
数据库抽象层使得函数名更容易记忆,它同时还在查询中添加了内置的安全特性。有时,
我们需要连接到第3方或者遗留的数据库上,如果Drupal数据库API能满足这些需要并
同时提供安全特性的话,那该多好啊。幸好,我们可以!
在settings.php文件中,$db_url既可以是一个字符串(通常是这样的)也可以是包含
多个数据库连接字符串的数组。下面是默认的语法,声明了一个单独的连接字符串:
$db_url = 'mysql://username:password@localhost/databasename';
当使用一个数组时,它的键是一个在激活数据库连接时所引用的简洁名称,而它的值就是
连接字符串本身。下面是一个例子,在这里我们声明了两个连接字符串,默认的(default)
和遗留的(legacy):
$db_url['default'] = 'mysql://user:password@localhost/drupal5';
$db_url['legacy'] = 'mysql://user:password@localhost/legacydatabase';
注意 Drupal 本身使用的数据库一定要以default为键。
当你需要连接到Drupal 中其它的数据库上时,你首先使用它的键名激活该连接,当你使
用完连接时,将它切换回到默认的连接上。
// Get some information from a non-Drupal database.
db_set_active('legacy');
$result = db_query("SELECT * FROM ldap_user WHERE uid = %d",
$user->uid);
// Switch back to the default connection when finished.
db_set_active('default');
注意 切记一定要切换回到默认的连接上,这样Drupal 可以干净的完成整个请求生命周期
并将它写入到自己的表中。
由于数据库抽象层设计的是每个数据库使用同样的函数名,所以多个数据库后台(比如,
MySQL 和 PostgreSQL)不能够同时使用。然而,在同一个站点如何同时使用MySQL 和
PostgreSQL连接呢,相关信息请参看http://drupal.org/node/19522。
本文永久地址:http://drupalsh.cn/node/144 , 转载请注明出处.

