外部データベースに接続するために、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でこれを行う方法
次のように使用できます:
$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 リンク。
設定ファイルでメインデータベースと外部データベースを設定します。
$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');