사용자 정의 모듈에서 외부 데이터베이스 연결을 정의하고 사용하는 방법


10

외부 데이터베이스 쿼리에 크게 의존하는 모듈을 개발 중입니다. 모듈 전체에서 외부 데이터베이스 연결을 정의하고 사용하는 가장 좋은 방법이 있습니까?

이 페이지 는 연결하는 방법을 알려 주지만 모듈 (특정 후크?)에 넣을 위치는 지정하지 않으므로 한 번만 정의하면됩니다. 또한 항상 "db_set_active ( 'YourDatabaseKey');"를 수행해야합니다. 또는 db를 사용하도록 설정할 인수를 전달할 수 있습니까? Drupal 7을 사용하고 있습니다.


다른 유형의 데이터베이스를 사용하는 경우 DBTNG 모듈 이 필요 합니다
Sivaji

제안 해 주셔서 감사하지만 Drupal 6을 사용하는 경우에만 해당 모듈이 필요합니다. Drupal 7을 사용하고 있습니다.
Whisky

답변:


10

이 코드 (후크 또는 모듈)를 넣을 특정 장소가 없으며 필요한 곳에 넣습니다.
따라서 다른 데이터베이스에서 쿼리 직전과 기본 DB를 다시 설정 한 직후에 가야합니다.

모든 모듈이 외부 DB에 의존하는 경우 모듈에 대해 호출 된 첫 번째 기능의 시작과 마지막 기능의 끝 부분에 시작하십시오.

물론 모든 함수는 외부 DB에서 실행되어야하며 다시 전환하지 않고 기본 데이터베이스를 쿼리 할 필요가 없습니다.

이 코드는 실패합니다 :

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_set_active를 사용하여 외부 db를 선택하는 별도의 함수를 작성하고 실패하면 db 구성을 추가하고 다시 시도합니다. 그렇게하면 외부 쿼리를 실행하기 전에 다른 후크에서 사용할 수 있지만 지적한대로 기본값을 다시 활성화해야합니다.
위스키

4

다음 구문 settings.php에 추가해야 /sites/default/합니다.

// 드루팔 6

$db_url['default'] = 'mysql://db_user:password@localhost/db_name';
$db_url['external'] = 'mysql://db_user2:password@localhost/db_name2';

// 폐기물 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.