Điểm:-1

Làm cách nào để lập trình kết nối cơ sở dữ liệu?

lá cờ cn

Xin chào, bất kỳ ai cũng có thể trợ giúp với Kết nối cơ sở dữ liệu bên ngoài.

$postgis_database = mảng(
        'cơ sở dữ liệu' => $drugis_postgis_connection->getdatabase(),
        'tên người dùng' => $drugis_postgis_connection->getusername(),
        'mật khẩu' => $drugis_postgis_connection->getpassword(),
        'máy chủ' => $drugis_postgis_connection->gethost(),
        'trình điều khiển' => 'pssql',

    );
    Cơ sở dữ liệu::setActiveConnection('postgis','default', $postgis_database);
    \Drupal::cơ sở dữ liệu();
    $info = Cơ sở dữ liệu::getConnection();
    dpm($info);

$info là kết nối mặc định, tôi không biết cách kết nối với kết nối 'postgis'

Kevin avatar
lá cờ in
Tại sao đây không phải là một phần của mảng cơ sở dữ liệu trong settings.PHP? Lỗi là gì?
Steffen  avatar
lá cờ cn
Không có lỗi. getConnectionInfo(); chỉ cho tôi cơ sở dữ liệu mặc định. Đây là một phần của mô-đun kết nối thực thể cấu hình cho nhiều kết nối cơ sở dữ liệu. Tôi không thể chuyển sang 'postgis'
lá cờ ru
Không có [setActiveConnection](https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Database%21Database.php/function/Database%3A%3AsetActiveConnection/9.0.x) với hơn một tham số. Hãy xem [Database::addConnectionInfo](https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Database%21Database.php/function/Database%3A%3AaddConnectionInfo/9.0.x ). Bạn thực sự nên cố gắng để có được một IDE phù hợp với việc hoàn thành mã và chạy (như VS Code hoặc PHPStorm), bạn không cần phải mù quáng đoán các tham số chức năng, một IDE sẽ trả lời các câu hỏi như thế này một cách nhanh chóng.
Jaypan avatar
lá cờ de
Bạn có thể khai báo nhiều kết nối cơ sở dữ liệu trong settings.php và sau đó chuyển đổi giữa https://www.drupal.org/docs/drupal-apis/database-api/instantiating-a-database-connection-object#s-using-a -kết nối cơ sở dữ liệu khác nhau
Điểm:0
lá cờ us

Cơ sở dữ liệu::setActiveConnection() chỉ đặt làm kết nối đang hoạt động, một kết nối được xác định trong tệp settings.php hoặc được thêm từ cuộc gọi trước đó vào Cơ sở dữ liệu::addConnectionInfo().

Mã chính xác sẽ là mã sau đây.

$postgis_database = [
  'cơ sở dữ liệu' => $drugis_postgis_connection->getdatabase(),
  'tên người dùng' => $drugis_postgis_connection->getusername(),
  'mật khẩu' => $drugis_postgis_connection->getpassword(),
  'máy chủ lưu trữ' => $drugis_postgis_connection->gethost(),
  'trình điều khiển' => 'pssql',
];

// $key $mục tiêu
Cơ sở dữ liệu::addConnectionInfo('postgis','default', $postgis_database);
// $mục tiêu $key
Cơ sở dữ liệu::setActiveConnection('default', 'postgis');

Lưu ý thứ tự tham số trong hai lần gọi phương thức cuối cùng. Cũng lưu ý thứ tự chỉ mục mảng được sử dụng trong cơ sở dữ liệu $ mảng được đặt trong tệp settings.php.

// $key $mục tiêu
$databases['default']['default'] = [
  'cơ sở dữ liệu' => 'tên cơ sở dữ liệu',
  'tên người dùng' => 'tên người dùng sql',
  'mật khẩu' => 'mật khẩu sql',
  'máy chủ' => 'máy chủ cục bộ',
  'cổng' => '3306',
  'trình điều khiển' => 'mysql',
  'tiền tố' => '',
  'đối chiếu' => 'utf8mb4_General_ci',
 ];

Các kết nối được thêm vào với Cơ sở dữ liệu::addConnectionInfo() không vĩnh viễn; chúng được thêm vào thuộc tính tĩnh của cơ sở dữ liệu lớp. Tất cả các hàm/phương thức muốn sử dụng kết nối được xác định trong $postgis_database cần thực thi mã tôi đã trình bày trước khi truy vấn cơ sở dữ liệu hoặc lưu các giá trị trong cơ sở dữ liệu.
Có lẽ tốt hơn là thêm các kết nối bổ sung trong cài đặt.

Một lỗi cần tránh là gọi các hàm Drupal truy vấn một bảng cơ sở dữ liệu Drupal cụ thể sau khi gọi Cơ sở dữ liệu::setActiveConnection('default', 'postgis'). Ví dụ, gọi taxonomy_term_load_multiple_by_name() sau đó Cơ sở dữ liệu::setActiveConnection('default', 'postgis') sẽ không hoạt động, ngoại trừ trường hợp cơ sở dữ liệu postgis/mặc định chứa một bản sao của các bảng được sử dụng từ Drupal. (Thông thường, đó không phải là trường hợp, vì một mô-đun sử dụng cơ sở dữ liệu khác sẽ không tạo bản sao của các bảng mà Drupal muốn tìm trong cơ sở dữ liệu đó.)
Trước khi gọi các chức năng như taxonomy_term_load_multiple_by_name(), mã nên gọi Cơ sở dữ liệu::setActiveConnection(), khôi phục kết nối đang hoạt động về kết nối mặc định được sử dụng bởi Drupal, dành cho cơ sở dữ liệu chứa tất cả các bảng được sử dụng từ Drupal.

Steffen  avatar
lá cờ cn
Cảm ơn bạn rất nhiều, tôi quên sao chép phương thức addConnectionInfo ở đây và đã viết thay vì tham số này trong setActiveConnection(). Nhưng hãy biết với khóa và mục tiêu trong setActiveConnection, nó hoạt động. Cảm ơn

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.