Рейтинг:-1

Как программно установить соединение с базой данных?

флаг cn

Здравствуйте, может ли кто-нибудь помочь с подключением к внешней базе данных.

$postgis_database = массив(
        'база данных' => $drugis_postgis_connection->getdatabase(),
        'имя пользователя' => $drugis_postgis_connection->getusername(),
        'пароль' => $drugis_postgis_connection->getpassword(),
        'хост' => $drugis_postgis_connection->gethost(),
        'драйвер' => 'pgsql',

    );
    Database::setActiveConnection('postgis','default', $postgis_database);
    \Друпал::база данных();
    $info = База данных::getConnection();
    дпм($информация);

$info - это соединение по умолчанию, я не знаю, как подключиться к соединению "postgis"

Kevin avatar
флаг in
Почему это не часть массива баз данных в settings.PHP? В чем ошибка?
Steffen  avatar
флаг cn
Нет ошибки. получитьинформацию о соединении(); покажи мне базу данных по умолчанию. Это часть модуля подключения объекта конфигурации для нескольких подключений к базе данных. Я не могу переключиться на «postgis»
флаг ru
Нет [setActiveConnection](https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Database%21Database.php/function/Database%3A%3AsetActiveConnection/9.0.x) с более чем один параметр. Взгляните на [Database::addConnectionInfo](https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Database%21Database.php/function/Database%3A%3AaddConnectionInfo/9.0.x ). Вы действительно должны попытаться получить правильную IDE с включенным и работающим завершением кода (например, VS Code или PHPStorm), вам не нужно слепо угадывать параметры функции, IDE ответит на такие вопросы на лету.
Jaypan avatar
флаг de
Вы можете объявить несколько подключений к базе данных в settings.php и переключаться между ними https://www.drupal.org/docs/drupal-apis/database-api/instantiating-a-database-connection-object#s-using-a. -различное-соединение-базы данных
Рейтинг:0
флаг us

База данных::setActiveConnection() просто устанавливает в качестве активного соединения соединение, определенное в файле settings.php или добавленное из предыдущего вызова База данных:: аддконнектионинфо().

Правильный код будет следующим.

$postgis_database = [
  'база данных' => $drugis_postgis_connection->getdatabase(),
  'имя пользователя' => $drugis_postgis_connection->getusername(),
  'пароль' => $drugis_postgis_connection->getpassword(),
  'хост' => $drugis_postgis_connection->gethost(),
  'драйвер' => 'pgsql',
];

// $ключ $цель
Database::addConnectionInfo('postgis','default', $postgis_database);
// $целевой ключ $
Database::setActiveConnection('по умолчанию', 'postgis');

Обратите внимание на порядок параметров в последних двух вызовах метода. Обратите также внимание на порядок индексов массива, используемый в $база данных массив, заданный в файле settings.php.

// $ключ $цель
$базы данных['по умолчанию']['по умолчанию'] = [
  'база данных' => 'имя базы данных',
  'имя пользователя' => 'sqlusername',
  'пароль' => 'sqlpassword',
  'хост' => 'локальный хост',
  'порт' => '3306',
  'драйвер' => 'mysql',
  'префикс' => '',
  'сопоставление' => 'utf8mb4_general_ci',
 ];

Соединения, добавленные с База данных:: аддконнектионинфо() не являются постоянными; они добавляются к статическому свойству База данных учебный класс. Все функции/методы, которые хотят использовать соединение, определенное в $postgis_database необходимо выполнить код, который я показал, прежде чем запрашивать базу данных или сохранять значения в базе данных.
Возможно, лучше добавить дополнительные подключения в настройках.

Ошибкой, которую следует избегать, является вызов функций Drupal, которые запрашивают определенную таблицу базы данных Drupal после вызова База данных::setActiveConnection('по умолчанию', 'postgis'). Например, вызов таксономия_term_load_multiple_by_name() после База данных::setActiveConnection('по умолчанию', 'postgis') не будет работать, за исключением случая, когда база данных postgis/default содержит копию таблиц, используемых в Drupal. (Обычно это не так, поскольку модуль, использующий другую базу данных, не собирается делать копии таблиц, которые Drupal ожидает найти в этой базе данных.)
Перед вызовом таких функций, как таксономия_term_load_multiple_by_name(), код должен вызывать База данных::setActiveConnection(), который восстанавливает активное соединение с соединением по умолчанию, используемым Drupal, которое предназначено для базы данных, содержащей все таблицы, используемые из Drupal.

Steffen  avatar
флаг cn
Большое спасибо, я забыл скопировать сюда метод addConnectionInfo и вместо этого написал параметр в setActiveConnection(). Но знайте, что с ключом и целью в setActiveConnection это работает. Спасибо

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.