วิธีกำหนดและใช้การเชื่อมต่อฐานข้อมูลภายนอกในโมดูลที่กำหนดเอง


10

ฉันกำลังพัฒนาโมดูลที่ต้องอาศัยการสืบค้นฐานข้อมูลภายนอกอย่างมาก มีวิธีปฏิบัติที่ดีที่สุดสำหรับการกำหนดและใช้การเชื่อมต่อฐานข้อมูลภายนอกตลอดทั้งโมดูลหรือไม่?

หน้านี้จะบอกวิธีการเชื่อมต่อ แต่จะไม่วางไว้ในโมดูล (เบ็ดเฉพาะ?) ดังนั้นฉันจะต้องกำหนดเพียงครั้งเดียว นอกจากนี้จำเป็นต้องทำ "db_set_active ('YourDatabaseKey');" หรือฉันจะส่งผ่านข้อโต้แย้งที่จะตั้งค่าให้ใช้? ฉันใช้ Drupal 7


หากคุณกำลังใช้ฐานข้อมูลประเภทต่าง ๆ คุณจะต้องใช้โมดูลDBTNG
Sivaji

ขอบคุณสำหรับคำแนะนำ แต่โมดูลนั้นจำเป็นเฉพาะเมื่อคุณใช้ Drupal 6 ฉันใช้ Drupal 7
Whisky

คำตอบ:


10

ไม่มีสถานที่ที่จะวางรหัสนี้ (hook หรือโมดูล) คุณเพียงแค่วางไว้ในตำแหน่งที่คุณต้องการ
ดังนั้นควรไปก่อนการสืบค้นของคุณในฐานข้อมูลอื่นและหลังจากตั้งค่าฐานข้อมูลเริ่มต้น

หากโมดูลทั้งหมดของคุณจะพึ่งพาฐานข้อมูลภายนอกเพียงแค่ใส่จุดเริ่มต้นของฟังก์ชั่นแรกที่เรียกว่าโมดูลของคุณและในตอนท้ายของฟังก์ชั่นสุดท้าย

แน่นอนทุกฟังก์ชั่นของคุณควรถูกเรียกใช้งานบนฐานข้อมูลภายนอกและไม่มีอะไรที่จะต้องสืบค้นฐานข้อมูลเริ่มต้นโดยไม่ต้องสลับกลับ

รหัสต่อไปนี้จะล้มเหลว:

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

คุณควรสลับไปมา:

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
ขอบคุณสำหรับคำอธิบาย ฉันสิ้นสุดการสร้างฟังก์ชันแยกต่างหากที่เลือก db ภายนอกของฉันด้วย db_set_active และหากไม่สำเร็จจะเพิ่มการกำหนดค่า db แล้วลองอีกครั้ง ด้วยวิธีนี้ฉันสามารถใช้มันใน hooks ที่แตกต่างกันก่อนที่จะเรียกใช้การสืบค้นภายนอก แต่ฉันต้องตั้งค่าเริ่มต้นที่ใช้งานอีกครั้งตามที่คุณชี้ให้เห็น
วิสกี้

4

คุณจะต้องเพิ่มเข้าไปในที่settings.phpตั้ง/sites/default/ในไวยากรณ์ต่อไปนี้

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

และหลังจากการตั้งค่าเหล่านี้คุณสามารถใช้ db_set_active () เพื่อสลับระหว่างฐานข้อมูล


ขอบคุณคุณสามารถทำได้ด้วยวิธีนี้ แต่ฉันเลือกที่จะทำจากภายในโมดูลของฉันตามที่อธิบายไว้ในหน้าฉันเชื่อมโยงในคำถาม ด้วยวิธีนี้คุณสามารถให้ผู้ใช้ผู้ดูแลระบบกรอกข้อมูลการกำหนดค่าของตนเองในแบบฟอร์มการตั้งค่าผู้ดูแลระบบ
วิสกี้
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.