你好,有人可以帮助建立外部数据库连接吗?
$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”连接
发布于 2021-07-05 16:38:36
Database::setActiveConnection()只是将在settings.php文件中定义的连接设置为活动连接,或者从以前对Database::addConnectionInfo()的调用中添加连接。
正确的代码将是以下代码。
$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数组中使用的数组索引顺序。
// $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的所有表的数据库。
https://drupal.stackexchange.com/questions/303934
复制相似问题