it-swarm.com.de

So definieren und verwenden Sie eine externe Datenbankverbindung in einem benutzerdefinierten Modul

Ich entwickle ein Modul, das stark von externen Datenbankabfragen abhängt. Gibt es eine bewährte Methode zum Definieren und Verwenden einer externen Datenbankverbindung in einem Modul?

Diese Seite sagt mir, wie ich die Verbindung herstellen soll, aber nicht, wo ich sie in ein Modul einfügen soll (spezifischer Hook?), Damit ich sie nur einmal definieren muss. Außerdem muss immer "db_set_active ('YourDatabaseKey')" ausgeführt werden. oder kann ich ein Argument übergeben, mit dem die Datenbank verwendet wird? Ich benutze Drupal 7.

10
Whiskey

Es gibt keinen bestimmten Ort, an dem dieser Code abgelegt werden kann (Hook oder Modul). Sie platzieren ihn einfach dort, wo Sie ihn benötigen.
Es sollte also kurz vor Ihren Abfragen in der anderen Datenbank und kurz danach erfolgen, um die Standard-DB zurückzusetzen.

Wenn Ihr gesamtes Modul auf der externen Datenbank basiert, setzen Sie es einfach an den Anfang der ersten Funktion, die für Ihr Modul aufgerufen wird, und an das Ende der letzten Funktion.

Natürlich sollte jede Ihrer Funktionen in der externen Datenbank ausgeführt werden und nichts muss die Standarddatenbank abfragen müssen, ohne zurückzuschalten.

Dieser folgende Code würde fehlschlagen:

db_set_active('YourDatabaseKey');

$result = db_query('SELECT ...'); //Your own queries on the external DB.

$node = node_load(123); //This would fail on the external DB.

$result = db_query('SELECT ...'); //Your own queries on the external DB.

db_set_active(); 

Sie sollten hin und her wechseln:

db_set_active('YourDatabaseKey');

$result = db_query('SELECT ...'); //Your own queries on the external DB.

db_set_active(); 
$node = node_load(123); //Query made on the default Drupal DB.
db_set_active('YourDatabaseKey');

$result = db_query('SELECT ...'); //Your own queries on the external DB.

db_set_active(); 
10
tostinni

Sie müssen in settings.php Unter /sites/default/ In der folgenden Syntax hinzufügen

// Drupal 6

$db_url['default'] = 'mysql://db_user:[email protected]/db_name';
$db_url['external'] = 'mysql://db_user2:[email protected]/db_name2';

// Drupal 7

$databases = array (
  'default' =>
  array (
    'default' =>
    array (
      'database' => 'db1',
      'username' => 'user1',
      'password' => 'pass',
      'Host' => 'Host1',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
    ),
  ),
  'extra' =>
  array (
    'default' =>
    array (
      'database' => 'db2',
      'username' => 'user2',
      'password' => 'pass',
      'Host' => 'Host2',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
    ),
  ),
);

Nach diesen Einstellungen können Sie mit db_set_active () zwischen Datenbanken wechseln.

4
Shoaib Nawaz