欢迎各位兄弟 发布技术文章
这里的技术是共享的
Drupal7 如何连接到多个数据库
尽管数据库抽象层使得函数名更容易记住,也内置了安全查询。有时,我们需要连接到第三方或遗留的数据库,使用Drupal的数据库API即可满足这样的需求,也可获得安全查询的好处。例如,你的模块可以连接到非Drupal的数据库,并返回数据。
在settings.php文件,$databases是一个由多个数据库连接字符串组成的数组。
下面是单个连接的默认语法:
array
(
'driver'
=>
'mysql'
,
'database'
=>
'databasename'
,
'username'
=>
'username'
,
'password'
=>
'password'
,
'host'
=>
'localhost'
,
'port'
=> 3306,
'prefix'
=>
'myprefix_'
,
);
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