web-dev-qa-db-ja.com

D8でのリモートデータベースへの接続

外部データベースに接続するために、settings.phpに次のパラメーターがあります。

$databases['d8243']['default'] = array (
  'database' => 'drupal8',
  'username' => 'root',
  'password' => '123123',
  'prefix' => '',
  'Host' => '192.168.1.243',
  'port' => '3306',
  'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
  'driver' => 'mysql',
);

そして、次のコードを使用してdbからいくつかのデータにアクセスしています。

\Drupal\Core\Database\Database::setActiveConnection('d8243');
$query = "Select * from node__field_target_config_controller";
$result = db_query($query);
$obj = $result->fetchObject();
echo json_encode($obj);
exit;

現在のサーバーと外部dbサーバーはsame network

しかし、次のエラーが発生しています:

/ var/www-drupal/core/lib/Drupalの例外「PDOException」とメッセージ「SQLSTATE [28000] [1045] Access denied for user 'root'@'192.168.1.245' [error] using password:YES)」 /Core/Database/Driver/mysql/Connection.php:149

D8でリモートデータベースに接続する別の方法はありますか?またはそれを行う方法?

私がチェックしたとき、d6/d7バージョンにはリモートdbを指定するオプションがあります

$db_url = 'mysql://username:[email protected]/databasename';

d8でこれを行う方法

1
Crazyrubixfan

次のように使用できます:

$other_database = array(
  'database' => 'drupal8',
  'username' => 'root', // assuming this is necessary
  'password' => '123123', // assuming this is necessary
  'Host' => '192.168.1.243', // assumes localhost
  'port' => '3306',
  'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
  'driver' => 'mysql', // replace with your database driver
);
// replace 'YourDatabaseKey' with something that's unique to your module
Database::addConnectionInfo('d8243', 'default', $other_database);
db_set_active('d8243');
// execute queries here
db_set_active()

上記のように他のデータベースにアクセスできます。参照チェック this リンク。

3
Ajay Reddy

設定ファイルでメインデータベースと外部データベースを設定します。

$databases['default']['default'] = array (
  'database' => 'mysite_local',
  'username' => 'root',
  'password' => 'root',
  'prefix' => '',
  'Host' => 'localhost',
  'port' => '',
  'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
  'driver' => 'mysql',
);

$databases['migration_database']['default'] = array (
  'database' => 'drupal8',
  'username' => 'root',
  'password' => '123123',
  'prefix' => '',
  'Host' => '192.168.1.243',
  'port' => '3306',
  'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
  'driver' => 'mysql',
);

次に、他のデータベースにアクセスする必要があるコードで、次を使用してデータベースを切り替えることができます。

db_set_active('migration_database');

元に戻すには:

db_set_active('default');
0
oknate