drupal 7中的多个并发数据库连接

tht*_*tas 9 drupal drupal-7

我正在为drupal 7网站编写一个包装类,它允许我连接并查询我的phpbb数据库.

连接到外部数据源时(根据drupal文档),您已设置活动数据库,运行查询,然后将活动数据库设置回默认值.

例如

db_set_active('phpbb');
$result = db_query($sql,$args,$opts);                               
db_set_active();//back to default
Run Code Online (Sandbox Code Playgroud)

但有没有办法使用drupal的数据库包装器来创建一个全新的连接,可以永久设置到新的数据库,而无需这样做来回切换废话?当然,我们可以同时处理与多个数据库的连接.

我做了一些谷歌搜索,但还没有发现任何人试图这样做.

tht*_*tas 12

典型.发布后5分钟我想出来......所以,对于未来的googlers:

基本上,您不使用db_query,而是在连接上运行查询而不设置活动链接.

您可以通过查看db_query的工作原理来解决这个问题:http://api.drupal.org/api/drupal/includes--database--database.inc/function/db_query/7

所以它看起来像这样:

$target='default';
$key = 'phpbb';
$phpbb = Database::getConnection($target,$key);
$result = $phpbb->query($sql,$args,$opts);
Run Code Online (Sandbox Code Playgroud)

这假设您在settings.php中配置了一个数据库,如下所示:

$databases['phpbb']['default'] = array(
    'driver' => 'mysql',
    'database' => 'forum',
    'username' => 'username',
    'password' => 'password',
    'host' => 'mysql.host.com',
    'prefix' => 'phpbb3_'
);
Run Code Online (Sandbox Code Playgroud)

  • `$ phpbb = Database :: getConnection($ target ='default',key ='phpbb');`这是我不时看到的一个错误,我不知道人们怎么会到达这样的代码.你想要的是`$ phpbb = Database :: getConnection('default','phpbb');`你的代码工作的唯一原因是表达式`$ target ='default'`评估为`default`但是变量`*caller*范围中的$ target`变为''default'`,这可能不是indended. (6认同)