드루팔 모듈 개발시에 겪을 수 있는 DB 쿼리 관련 에러 대응책

드루팔 모듈 개발시에 겪을 수 있는 DB 쿼리 관련 에러 대응책

드루팔 모듈을 개발할 때, Drupal DB 이외의 또다른 DB로의 접근이
필요하게 되면 조심해야 할 것이 있다. 바로 Connection 관리 문제다.

드루팔 모듈을 만들다가 현재 드루팔 DB 이외의 또다른 DB로의
컨넥션을 Class 혹은 mysql 관련 표준 함수로 접근하게 되면,
쿼리 관련 에러가 나타나거나 권한이 없다는 메시지가 계속 나온다.

대표적인 쿼리 에러로는 watchdog에 드루팔 움직임을 기록하는 것이
가장 먼저 나타나는 현상이다.

원인은 드루팔 컨넥션이 일시적으로 다른 DB 컨넥션 때문에 교란당한 것이다.
특히 watchdog 관련 DB 쿼리는 그 정도가 심한데...
PHP 의 mysql 관련 표준 함수를 사용하기 때문에 컨넥션 정보가 헛갈리는 것 같다.

이때 취하는 해결 팁으로는,
"모듈의 코드 상단부에 기존의 드루팔 컨넥션을 저장(백업)해 두었다가,
모듈의 DB 쿼리 부분의 실행이 끝나고 나면, 다시 복원하는 방법"이 좋다.

예를 들어... 다음과 같은 코드가 될 것이다.

function 아무개_모듈_홍길동_기능 {
    // IMPORTANT! // Previous Drupal Connection for DB
    $prevdb = db_is_active(); // Previous Drupal Connection for DB - BACKUP

    // 드루팔 DB 이외의 또다른 DB 컨넥션
    $connAnotherDB = new DBConnect(DB_HOST, DB_NAME, DB_USER, DB_PASS);

    ..... ( 중략 ) .....
    $connAnotherDB 를 이용한 여러 처리...
    ..... ( 중략 ) .....

    // IMPORTANT! // Previous Drupal Connection for DB
    db_set_active($prevdb); // Previous Drupal Connection for DB - RESTORE
}

Your rating: None 평균 : 4 (1 vote)

댓글

드루팔의 db_is_active

드루팔의 db_is_active 관련 API 설명은 아래 주소에 있다.
http://api.drupal.org/api/function/db_is_active/6