Özel bir modülde harici veritabanı bağlantısı nasıl tanımlanır ve kullanılır


10

Dış veritabanı sorguları büyük ölçüde güvenecek bir modül geliştiriyorum. Bir modül boyunca harici bir veritabanı bağlantısı tanımlamak ve kullanmak için en iyi uygulama var mı?

Bu sayfa bana bağlantının nasıl yapılacağını söyler, ancak bir modüle (belirli bir kanca?) Nereye koyacağımı söyler, bu yüzden sadece bir kez tanımlamak zorundayım. Ayrıca, her zaman "db_set_active ('YourDatabaseKey');" veya db kullanacak bir argüman iletebilir miyim? Drupal 7 kullanıyorum.


Farklı türde veritabanları kullanıyorsanız, DBTNG modülüne ihtiyacınız olacaktır
Sivaji

Öneri için teşekkürler, ancak bu modül sadece Drupal 6 kullanıyorsanız gereklidir. Drupal 7 kullanıyorum.
Whiskey

Yanıtlar:


10

Bu kodu (kanca veya modül) koymak için özel bir yer yoktur, sadece ihtiyacınız olan yere koyarsınız.
Bu nedenle, diğer veritabanındaki sorgularınızdan hemen önce ve varsayılan DB'yi geri ayarladıktan hemen sonra gitmelidir.

Tüm modülünüz harici DB'ye dayanacaksa, modülü modülünüz için çağrılan ilk işlevin başlangıcına ve son işlevin sonuna koyun.

Tabii ki işlevinizin her biri harici DB üzerinde yürütülmeli ve hiçbir şey varsayılan veritabanını geri dönmeden sorgulamak zorunda değildir.

Aşağıdaki kod başarısız olur:

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

İleri geri gitmelisiniz:

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
Açıklama için teşekkürler. Db_set_active ile harici db seçer ve bu başarısız olursa, db yapılandırma ekler ve tekrar dener ayrı bir işlev oluşturma sona erdi. Bu şekilde harici sorguları çalıştırmadan önce farklı kancalarda kullanabilirim, ancak işaret ettiğiniz gibi varsayılan aktifi tekrar ayarlamam gerekiyor.
Viski

4

Aşağıdaki sözdiziminde settings.phpbulunan /sites/default/dizine eklemeniz gerekecek

// 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' => '',
    ),
  ),
);

Ve bu ayarlardan sonra veritabanları arasında geçiş yapmak için db_set_active () kullanabilirsiniz.


Teşekkürler, bu şekilde yapabilirsiniz, ancak bunu soruda bağlandığım sayfada açıklandığı gibi modülümün içinden yapmayı seçtim. Bu şekilde, yönetici kullanıcılarının bir yönetici ayarı formunda kendi yapılandırmalarını doldurmasını sağlayabilirsiniz.
Viski
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.