首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以编程方式设置数据库连接?

如何以编程方式设置数据库连接?
EN

Drupal用户
提问于 2021-07-05 12:03:29
回答 1查看 499关注 0票数 -1

你好,有人可以帮助建立外部数据库连接吗?

代码语言:javascript
复制
$postgis_database = array(
        'database' => $drugis_postgis_connection->getdatabase(),
        'username' => $drugis_postgis_connection->getusername(),
        'password' => $drugis_postgis_connection->getpassword(),
        'host' => $drugis_postgis_connection->gethost(),
        'driver' => 'pgsql',

    );
    Database::setActiveConnection('postgis','default', $postgis_database);
    \Drupal::database();
    $info = Database::getConnection();
    dpm($info);

$info是默认连接,我不知道如何连接到“postgis”连接

EN

回答 1

Drupal用户

回答已采纳

发布于 2021-07-05 16:38:36

Database::setActiveConnection()只是将在settings.php文件中定义的连接设置为活动连接,或者从以前对Database::addConnectionInfo()的调用中添加连接。

正确的代码将是以下代码。

代码语言:javascript
复制
$postgis_database = [
  'database' => $drugis_postgis_connection->getdatabase(),
  'username' => $drugis_postgis_connection->getusername(),
  'password' => $drugis_postgis_connection->getpassword(),
  'host' => $drugis_postgis_connection->gethost(),
  'driver' => 'pgsql',
];

//                          $key      $target
Database::addConnectionInfo('postgis','default', $postgis_database);
//                            $target    $key
Database::setActiveConnection('default', 'postgis');

注意最后两个方法调用中的参数顺序。还请注意在$database文件中设置的settings.php数组中使用的数组索引顺序。

代码语言:javascript
复制
//         $key       $target
$databases['default']['default'] = [
  'database' => 'databasename',
  'username' => 'sqlusername',
  'password' => 'sqlpassword',
  'host' => 'localhost',
  'port' => '3306',
  'driver' => 'mysql',
  'prefix' => '',
  'collation' => 'utf8mb4_general_ci',
 ];

使用Database::addConnectionInfo()添加的连接不是永久的;它们被添加到Database类的静态属性中。所有希望使用$postgis_database中定义的连接的函数/方法都需要执行我在查询数据库或在数据库中保存值之前显示的代码。最好在设置中添加额外的连接。

要避免的一个错误是调用Drupal函数,在调用Database::setActiveConnection('default', 'postgis')之后查询特定的Drupal数据库表。例如,在Drupal之后调用taxonomy_term_load_multiple_by_name()将无法工作,除非postgis/ Database::setActiveConnection('default', 'postgis')数据库包含从D10使用的表的副本。(通常情况并非如此,因为使用不同数据库的模块不会复制Drupal希望在数据库中找到的表。)在调用像taxonomy_term_load_multiple_by_name()这样的函数之前,代码应该调用Database::setActiveConnection(),这将恢复到Drupal使用的默认连接的活动连接,该连接用于包含来自Drupal的所有表的数据库。

票数 0
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/303934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档