Drupal can connect to different databases with elegance and ease!
First define the database connections Drupal can use by editing the $db_url
string in the Drupal configuration file (settings.php for 4.6 and above, otherwise conf.php). By default only a single connection is defined
<?php
$db_url = 'mysql://drupal:drupal@localhost/drupal';
?>
To allow multiple database connections, convert $db_url
to an array.
<?php
$db_url['default'] = 'mysql://drupal:drupal@localhost/drupal';
$db_url['mydb'] = 'mysql://user:pwd@localhost/anotherdb';
$db_url['db3'] = 'mysql://user:pwd@localhost/yetanotherdb';
?>
Note that database storing your Drupal installation should be keyed as the default
connection.
To query a different database, simply set it as active by referencing the key name.
<?php
db_set_active('mydb');
db_query('SELECT * FROM table_in_anotherdb');
//Switch back to the default connection when finished.
db_set_active('default');
?>
Make sure to always switch back to the default connection so Drupal can cleanly finish the request lifecycle and write to its system tables.
Note: It is particularly important to switch back to the active Drupal database prior to any calls to Drupal functions. Errors in the error log about not being able to find the 'system' table are an indication that calls to Drupal functions preceed switching back to the default database.
This only works with two databases of the same type. For example the following codewill not work.
<?php
// ... header of the settings.php file
$db_url = array (
"default" => "mysql://user:pass@host/db",
"second" => "pgsql://user:pass@host/db"
);
// ...
?>
Set up multiple database on the fly
<?php
global $db_url; // the internal variable that contains database link
if (!is_array($db_url)) {
$default_db = $db_url;
$db_url = array('default' => $default_db);
}
//set up the new database value
$db_url['mydb'] = 'mysql://user:pwd@localhost/anotherdb';
db_set_active('mydb'); // activation & execution same as explained above
$results = db_query($sql); //sql represents the query to be executed
db_set_active('default'); // set back to original
?>
Drupal 7
In Drupal 7, first construct a database connection array, then connect to it to Drupal's front-controller, then execute queries using D7's database abstraction layer.
<?php
$other_database = array(
'database' => 'databasename',
'username' => 'username', // assuming this is necessary
'password' => 'password', // assuming this is necessary
'host' => 'localhost', // assumes localhost
'driver' => 'mysql', // replace with your database driver
);
// replace 'YourDatabaseKey' with something that's unique to your module
Database::addConnectionInfo('YourDatabaseKey', 'default', $other_database);
db_set_active('YourDatabaseKey');
// execute queries here
db_set_active(); // without the paramater means set back to the default for the site
drupal_set_message(t('The queries have been made.'));
?>
For a complete reference of all Drupal Database Abstraction Layer functions seehttp://api.drupal.org/api/group/database.
分享到:
相关推荐
When it comes to relational databases, I can’t help thinking that something is missing. They’re used everywhere. There are many different databases: from the small and useful SQLite to the powerful ...
A comprehensive tutorial on both SQL Server 2005 and ADO.NET 3.0, Beginning C# 2008 Databases explains and demonstrates how to create database objects and program against them in both T–SQL and C#....
Migrating to Microservices Databases,Migrating to Microservices Databases
Beginning ASP.NET 4.5 Databases is a comprehensive introduction on how you can connect a Web site to many different data sources — not just databases — and use the data to create dynamic page ...
which in turn has driven the development of MySQL Cluster, integrating key technologies to enable the scaling of rapidly growing, write-intensive web databases, including: Auto-sharding for write-...
To get the most out of it, you should have a firm grasp of modern JavaScript and some knowledge of how to work with relational databases and the command line. I explain new and interesting bits of ...
在某些复杂的应用场景下,我们可能会遇到“Multiple Databases”(多个数据库)的情况,这通常发生在数据量庞大、分布式系统或者需要高可用性和容错性的场景中。本文将深入探讨如何在C#环境下从多个相似的数据库中...
In this fast-paced book on the Docker open standards platform for developing, packaging and running portable distributed applications, Deepak Vorhadiscusses how to build, ship and run applications on ...
This book on Kubernetes, the container cluster manager, discusses all aspects of using Kubernetes in today’s complex big ...How to use Kubernetes with NoSQL Databases How to use Kubernetes with RDBMS
How to connect to standard relational databases, noSQL data sources, and more Useful case studies and example components which assist you in creating your own systems Who This Book Is For Software ...
database_solutions_a_step_by_step_guide_to_building_databases