CI 묻고 답하기

제목 디비 컨넥션 변경 문의
카테고리 CI 2, 3
글쓴이 경상도곰남 작성시각 2017/02/14 12:50:38
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 13135   RSS

아래의 컨트롤러 처럼 데이터베이스를 연결 할려고 하니 연결이 안되고 TEST 디비에 연결이 됩니다.

$active_group='' 하면 에러가 나더라구요..

TEST2의 디비로 연결을 할려면 어떻게 해야 하나요?

코드이그니아터 버젼은 2.x를 사용하고 있습니다.

고수님들의 답변 부탁드립니다.

function __construct()    {
       parent::__construct();

      $this->load->database("TEST2", TRUE);       

}

 


$active_group = 'TEST';
$active_record = TRUE;

$db['TEST']['hostname'] = 'localhost';
$db['TEST']['username'] = 'TEST';
$db['TEST']['password'] = '****';
$db['TEST']['database'] = 'TEST';
$db['TEST']['dbdriver'] = 'mssql';
$db['TEST']['dbprefix'] = '';
$db['TEST']['pconnect'] = FALSE;
$db['TEST']['db_debug'] = FALSE;
$db['TEST']['cache_on'] = FALSE;
$db['TEST']['cachedir'] = '';
$db['TEST']['char_set'] = 'cp949';
$db['TEST']['dbcollat'] = 'Korean_Wansung_CI_AS';
$db['TEST']['swap_pre'] = '';
$db['TEST']['autoinit'] = FALSE;
$db['TEST']['stricton'] = FALSE;



$db['TEST2']['hostname'] = 'localhost';
$db['TEST2']['username'] = 'TEST2';
$db['TEST2']['password'] = '****';
$db['TEST2']['database'] = 'TEST2';
$db['TEST2']['dbdriver'] = 'mssql';
$db['TEST2']['dbprefix'] = '';
$db['TEST2']['pconnect'] = FALSE;
$db['TEST2']['db_debug'] = FALSE;
$db['TEST2']['cache_on'] = FALSE;
$db['TEST2']['cachedir'] = '';
$db['TEST2']['char_set'] = 'cp949';
$db['TEST2']['dbcollat'] = 'Korean_Wansung_CI_AS';
$db['TEST2']['swap_pre'] = '';
$db['TEST2']['autoinit'] = FALSE;
$db['TEST2']['stricton'] = FALSE;

 

 다음글 mysql 이전글 다음글 (5)
 이전글 전역변수 선언 질문입니다. (1)

댓글

한대승(불의회상) / 2017/02/14 13:01:18 / 추천 0

메뉴얼에 잘 설명되어 있습니다만...

여러 데이터베이스에 연결하기

하나이상의 데이터베이스에 동시에 연결하려면 아래와같이 합니다.:

$DB1 = $this->load->database('group_one', TRUE);
$DB2 = $this->load->database('group_two', TRUE);

Note: "group_one" 과"group_two" 부분을 여러분이 연결하고싶은 그룹명으로 바꾸어주세요 .( 아니면 위에서 설명한것처럼 연결값을 넘겨줘도 됩니다.).

두번째 파라미터를 TRUE (boolean) 로 하시면 함수는 데이터베이스 객체를 리턴합니다..

이방식으로 연결하면 일반적인 디비사용방식이 아니라 객체이름을 이용하여 데이터베이스를

사용하는것이 좋습니다.:

 

일반적인방법:

$this->db->query();
$this->db->result();
객체이름을 이용한 방법 :

$DB1->query();
$DB1->result();
etc...

경상도곰남 / 2017/02/14 14:05:04 / 추천 0

답변 감사합니다.

한가지만 더 물어보겠습니다.

제가 할려고 하는 것은 멀티를 하는 것이 아니라 로그인 시 선택을 통해 db에 접속을 할려고 합니다.

예를 들어 TEST를 선택하고 로그인을 하면 TEST 디비에 접속을 하고 TEST2를 선택하고 접속을 하면 TEST2 라는 디비에 접속을 하는 겁니다.

그리니까 db는 한개만 접속이 되는겁니다.

DB 접속 할 정보명은 세션에 담아 있는 상태이구요..

이럴경우 어떻게 구현을 하는 것을까요?

그리고 아래의 소스처럼 구현을 하면 DB를 두번 접속하는 건가요?

 / / model(work_model)

 function __construct()
 {
       parent::__construct();
       $this->db = $this->load->database($this->session->userdata('select'), true);
 }

 / / model(member_model)
 function __construct()
 {
       parent::__construct();
       $this->db = $this->load->database($this->session->userdata('select'), true);
 }

// constants.php
function __construct()
{
	parent::__construct();
    $this->load->model('work_m');
	$this->load->model('member_m');
}

 

한대승(불의회상) / 2017/02/15 08:43:38 / 추천 0

싱글톤이 구현되어 있어서 새로운 모델이 로드 될때마다 $this->load->database()를 호출하셔도 이미 접속된 데이터베이스에 대해선 다시 접속을 하지 않습니다.