Score:-1

ฉันจะตั้งค่าการเชื่อมต่อฐานข้อมูลทางโปรแกรมได้อย่างไร

ธง cn

สวัสดี ใครก็ได้ช่วยด้วยการเชื่อมต่อฐานข้อมูลภายนอก

$postgis_database = อาร์เรย์(
        'ฐานข้อมูล' => $drugis_postgis_connection->getdatabase(),
        'ชื่อผู้ใช้' => $drugis_postgis_connection->getusername(),
        'รหัสผ่าน' => $drugis_postgis_connection->getpassword(),
        'host' => $drugis_postgis_connection->gethost(),
        'ไดรเวอร์' => 'pgsql',

    );
    ฐานข้อมูล::setActiveConnection('postgis','default', $postgis_database);
    \Drupal::ฐานข้อมูล();
    $info = ฐานข้อมูล::getConnection();
    dpm($ข้อมูล);

$info เป็นการเชื่อมต่อเริ่มต้น ฉันไม่รู้วิธีเชื่อมต่อกับการเชื่อมต่อ 'postgis'

Kevin avatar
in flag
เหตุใดจึงไม่ใช่ส่วนหนึ่งของอาร์เรย์ฐานข้อมูลใน settings.PHP ข้อผิดพลาดคืออะไร?
Steffen  avatar
cn flag
ไม่มีข้อผิดพลาด getConnectionInfo(); แสดงฐานข้อมูลเริ่มต้นให้ฉันดู นี่เป็นส่วนหนึ่งของโมดูลการเชื่อมต่อเอนทิตีการกำหนดค่าสำหรับการเชื่อมต่อฐานข้อมูลหลายรายการ ฉันไม่สามารถเปลี่ยนเป็น 'postgis'
ru flag
ไม่มี [setActiveConnection](https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Database%21Database.php/function/Database%3A%3AsetActiveConnection/9.0.x) ที่มีมากกว่า หนึ่งพารามิเตอร์ ดูที่ [ฐานข้อมูล::addConnectionInfo](https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Database%21Database.php/function/Database%3A%3AaddConnectionInfo/9.0.x ). คุณควรพยายามรับ IDE ที่เหมาะสมด้วยการเติมโค้ดให้สมบูรณ์และเรียกใช้ (เช่น VS Code หรือ PHPStorm) คุณไม่จำเป็นต้องเดาพารามิเตอร์ฟังก์ชันสุ่มสี่สุ่มห้า IDE จะตอบคำถามเหล่านี้ได้ทันที
Jaypan avatar
de flag
คุณสามารถประกาศการเชื่อมต่อฐานข้อมูลหลายรายการใน settings.php และสลับระหว่าง https://www.drupal.org/docs/drupal-apis/database-api/instantiating-a-database-connection-object#s-using-a - การเชื่อมต่อฐานข้อมูลที่แตกต่างกัน
Score:0
ธง us

ฐานข้อมูล::setActiveConnection() เพียงตั้งค่าเป็นการเชื่อมต่อที่ใช้งานการเชื่อมต่อที่กำหนดไว้ในไฟล์ settings.php หรือเพิ่มจากการเรียกครั้งก่อน ฐานข้อมูล::addConnectionInfo().

รหัสที่ถูกต้องจะเป็นรหัสต่อไปนี้

$postgis_database = [
  'ฐานข้อมูล' => $drugis_postgis_connection->getdatabase(),
  'ชื่อผู้ใช้' => $drugis_postgis_connection->getusername(),
  'รหัสผ่าน' => $drugis_postgis_connection->getpassword(),
  'host' => $drugis_postgis_connection->gethost(),
  'ไดรเวอร์' => 'pgsql',
];

// $key $เป้าหมาย
ฐานข้อมูล::addConnectionInfo('postgis','default', $postgis_database);
// $เป้าหมาย $key
ฐานข้อมูล::setActiveConnection('default', 'postgis');

สังเกตลำดับพารามิเตอร์ในการเรียกเมธอดสองวิธีล่าสุด โปรดสังเกตลำดับดัชนีอาร์เรย์ที่ใช้ใน $ฐานข้อมูล อาร์เรย์ที่ตั้งค่าไว้ในไฟล์ settings.php

// $key $เป้าหมาย
$databases['default']['default'] = [
  'database' => 'ชื่อฐานข้อมูล',
  'ชื่อผู้ใช้' => 'ชื่อผู้ใช้ sqluser',
  'รหัสผ่าน' => 'sqlpassword',
  'โฮสต์' => 'โลคัลโฮสต์',
  'พอร์ต' => '3306',
  'ไดรเวอร์' => 'mysql',
  'คำนำหน้า' => '',
  'เรียง' => 'utf8mb4_general_ci',
 ];

การเชื่อมต่อที่เพิ่มเข้ามาด้วย ฐานข้อมูล::addConnectionInfo() ไม่ถาวร พวกมันถูกเพิ่มเข้าไปในคุณสมบัติคงที่ของ ฐานข้อมูล ระดับ. ฟังก์ชัน/เมธอดทั้งหมดที่ต้องการใช้การเชื่อมต่อที่กำหนดไว้ใน $postgis_database จำเป็นต้องเรียกใช้รหัสที่ฉันแสดงก่อนที่จะสอบถามฐานข้อมูลหรือบันทึกค่าในฐานข้อมูล
น่าจะดีกว่าถ้าเพิ่มการเชื่อมต่อพิเศษในการตั้งค่า

ข้อผิดพลาดที่ควรหลีกเลี่ยงคือการเรียกฟังก์ชัน Drupal ที่สอบถามตารางฐานข้อมูล Drupal เฉพาะหลังจากเรียก ฐานข้อมูล::setActiveConnection('default', 'postgis'). เช่น โทร taxonomy_term_load_multiple_by_name() หลังจาก ฐานข้อมูล::setActiveConnection('default', 'postgis') จะไม่ทำงาน ยกเว้นในกรณีที่ฐานข้อมูล postgis/default มีสำเนาของตารางที่ใช้จาก Drupal (โดยปกติจะไม่เป็นเช่นนั้น เนื่องจากโมดูลที่ใช้ฐานข้อมูลอื่นจะไม่สร้างสำเนาของตารางที่ Drupal คาดว่าจะพบในฐานข้อมูลนั้น)
ก่อนเรียกใช้ฟังก์ชันเช่น taxonomy_term_load_multiple_by_name(), รหัสควรโทร ฐานข้อมูล::setActiveConnection()ซึ่งจะคืนค่าการเชื่อมต่อที่ใช้งานอยู่เป็นค่าเริ่มต้นที่ใช้โดย Drupal ซึ่งใช้สำหรับฐานข้อมูลที่มีตารางทั้งหมดที่ใช้จาก Drupal

Steffen  avatar
cn flag
ขอบคุณมากฉันลืมที่จะคัดลอกเมธอด addConnectionInfo ที่นี่และเขียนแทนพารามิเตอร์นี้ใน setActiveConnection() แต่รู้ด้วยคีย์และเป้าหมายใน setActiveConnection มันใช้งานได้ ขอบคุณ

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา