2012-03-04 7 views
0

현재 사용자가 자신의 개인 DB 연결을 입력하여 MySQL 데이터베이스의 데이터를 활용할 수있는 응용 프로그램을 작성 중입니다.Codeigniter - 여러 데이터베이스 연결 - 로컬 및 원격

이것은 로컬 (관리 세션 등)과 원격 사용자에게 DB 연결이 두 개 있다는 것을 의미합니다.

누구나이 두 가지 연결을 관리하는 가장 좋은 방법에 대해 조언 할 수 있습니까? 나는 db 그룹을 보았습니다 - http://codeigniter.com/user_guide/database/connecting.html 그러나 사용자 db 연결은 세션 vars에 의해 설정 될 것이므로 원격 db의 세부 사항을 구성 파일에 넣을 수 없습니다.

내가 좋아하는 내 클래스 내에서 새로운 DB 그룹 설정을 수동으로 시도했다 :

 $db['foreign']['hostname'] = $this->session->userdata('hostname'); 
     $db['foreign']['username'] = $this->session->userdata('dbuser'); 
     $db['foreign']['password'] = $this->session->userdata('dbpassword'); 
     $db['foreign']['database'] = $this->session->userdata('dbname'); 
     $db['foreign']['dbdriver'] = "mysql"; 
     $db['foreign']['dbprefix'] = ""; 
     $db['foreign']['pconnect'] = FALSE; 
     $db['foreign']['db_debug'] = TRUE; 
     $db['foreign']['cache_on'] = FALSE; 
     $db['foreign']['cachedir'] = ""; 
     $db['foreign']['char_set'] = "utf8"; 
     $db['foreign']['dbcollat'] = "utf8_general_ci"; 

     $foreign_db = $this->load->database('foreign', TRUE); 

하지만 난 부하 라인에 예외를 얻을 :

You have specified an invalid database connection group. 
내가 이것을 달성 할 수있는 방법

는 사람이 조언을 할 수 ?

많은 감사, 벤.

+0

동일한 문제가있는 사용자의 경우 쉽게 읽을 수 있도록 올바른 답을 표시하십시오. – bh88

답변

3

그룹 호출 구문을 사용하려면 그룹을 구성 파일에 정의해야합니다. CI는 config를 데이터베이스 로더에 직접 전달하는 기능을 포함합니다. (참고 :이 단지 CI 2+ 기능이 될 수 있음)

당신이 뭔가 싶어 :

$db['hostname'] = $this->session->userdata('hostname'); 
$db['username'] = $this->session->userdata('dbuser'); 
$db['password'] = $this->session->userdata('dbpassword'); 
$db['database'] = $this->session->userdata('dbname'); 
$db['dbdriver'] = "mysql"; 
$db['dbprefix'] = ""; 
$db['pconnect'] = FALSE; 
$db['db_debug'] = TRUE; 
$db['cache_on'] = FALSE; 
$db['cachedir'] = ""; 
$db['char_set'] = "utf8"; 
$db['dbcollat'] = "utf8_general_ci"; 

$foreign_db = $this->load->database($db, TRUE); 
0

'외부'그룹은로드하려는 시점에서 시스템에 알 수없는 것입니다.

설정 파일에 아무 것도로드하지 마십시오. 그건 설정 파일이 아니라 기본적으로 문제입니다.

외국 데이터베이스를 실제로로드해야하는 경우 extending the CI controller으로로드하고 구조에로드하십시오.

+0

응답 해 주셔서 감사합니다. 명확히하기 위해, 필자는 외부 DB를 자동로드 할 필요가 없습니다. 단지 매개 변수가 세션 변수에 의해 설정되는 것처럼 외부 DB 연결을 설정하는 방법을 찾은 다음 클래스에 새 구성을 사용합니다. 예제의 매개 변수는 설정 파일이 아닌 클래스에서 설정하려고 시도한 곳입니다. 감사합니다, Ben. – Ben

+0

@ 벤 그럼, Nenoco와 함께 나온 대답이 맞습니다. – Repox

0

당신이 세션 VAR의를 얻고 설정이 미리 연결을 바르 채울 후크를 사용할 수 있습니다.

컨트롤러에서 수동으로 두 번째 DB 클래스를 호출하고 세션 클래스를 사용하여 세부 정보를 정의 할 수 있습니까?

+0

의견 주셔서 감사합니다. config 파일에서 내용을 비어있게 설정하겠습니까? $ db [ 'foreign'] [ '호스트 이름'] = ''; 컨트롤러에서 값을 어떻게 설정합니까? 감사합니다, Ben. – Ben

관련 문제