Cara mendefinisikan dan menggunakan koneksi basis data eksternal dalam modul khusus


10

Saya mengembangkan modul yang akan sangat bergantung pada permintaan basis data eksternal. Apakah ada praktik terbaik untuk mendefinisikan dan menggunakan koneksi basis data eksternal di seluruh modul?

Halaman ini memberi tahu saya cara membuat koneksi, tetapi tidak di mana harus meletakkannya di modul (pengait spesifik?) Jadi saya hanya perlu mendefinisikannya sekali. Juga, apakah selalu diperlukan untuk melakukan "db_set_active ('YourDatabaseKey');" atau bisakah saya memberikan argumen yang akan mengatur db untuk digunakan? Saya menggunakan Drupal 7.


Jika Anda menggunakan berbagai jenis basis data, Anda memerlukan modul DBTNG
Sivaji

Terima kasih atas sarannya, tetapi modul itu hanya diperlukan jika Anda menggunakan Drupal 6. Saya menggunakan Drupal 7.
Whiskey

Jawaban:


10

Tidak ada tempat khusus untuk meletakkan kode ini (pengait atau modul), Anda cukup meletakkannya di tempat yang Anda butuhkan.
Jadi itu harus tepat sebelum pertanyaan Anda pada database lain dan setelahnya untuk mengatur kembali DB default.

Jika semua modul Anda akan bergantung pada DB eksternal, letakkan saja di awal fungsi pertama yang dipanggil untuk modul Anda dan di akhir fungsi terakhir.

Tentu saja setiap fungsi Anda harus dijalankan pada DB eksternal dan tidak ada yang harus meminta database default tanpa beralih kembali.

Kode berikut ini akan gagal:

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(); 

Anda harus beralih bolak-balik:

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(); 

2
Terima kasih untuk penjelasannya. Saya akhirnya membuat fungsi terpisah yang memilih db eksternal saya dengan db_set_active dan jika itu gagal, ia menambah konfigurasi db dan mencoba lagi. Dengan begitu saya bisa menggunakannya di kait yang berbeda sebelum menjalankan permintaan eksternal, tapi saya perlu mengatur default aktif lagi seperti yang Anda tunjukkan.
Wiski

4

Anda harus menambahkan settings.phpberada di /sites/default/dalam sintaks berikut

// Drupal 6

$db_url['default'] = 'mysql://db_user:password@localhost/db_name';
$db_url['external'] = 'mysql://db_user2:password@localhost/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' => '',
    ),
  ),
);

Dan setelah pengaturan ini, Anda dapat menggunakan db_set_active () untuk berpindah antar database.


Terima kasih, Anda dapat melakukannya dengan cara ini, tetapi saya memilih untuk melakukannya dari dalam modul saya seperti yang dijelaskan pada halaman yang saya tautkan dalam pertanyaan. Dengan begitu Anda dapat membuat pengguna admin mengisi konfigurasi mereka sendiri pada formulir pengaturan admin.
Whiskey
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.