2012-05-07 4 views
1

내 스크립트에는 여러 데이터베이스에 대한 연결이 필요합니다. 어떤 부분은 하나에 연결하기 만하면됩니다. 어떤 경우에는 단일 스크립트 실행으로 다른 데이터베이스에서 쿼리를 수행해야하는 경우도 있습니다. PHP에서 여러 MySQL 데이터베이스 사용 및 관리

현재 나는이 같은 일을 해요 :
function db_connect($which) { 
    if($which == "main") { 
     $maindb = mysqli_connect(HOSTNAME_1, USER, PASSWORD, MAIN_DB); 
     return $maindb; 
    } elseif($which == "stats") { 
     $statsdb = mysqli_connect(HOSTNAME_2, USER, PASSWORD, STATS_DB); 
     return $statsdb; 
    } 
} 


$maindb = db_connect("main"); 
$statsdb = db_connect("stats"); 

나는 상수의 전체 설정 파일의 실제 호스트 이름, 사용자 이름, 암호 및 DB 이름을 유지한다.

그런 다음 각각의 링크를 다른 쿼리에 사용합니다.

더 깨끗한 방법이 있습니까?

+0

databaseconfigs를 배열에 저장하고 mysqli_connect ($ config [$ db] [ 'hostname'], $ config [$ db] [ 'user', ...)'] 할 수있다. 그것이 codeigniter가하는 방법입니다. – Zombaya

답변

0

아주 좋은, 당신은 당신의 코드를 복제하지 않으려 말아야 있지만 :

function db_connect($which) { 
    if($which == "main") { 
     $host = HOSTNAME_1; 
     $db = MAIN_DB; 
    } elseif($which == "stats") { 
     $host = HOSTNAME_2; 
     $db = STATS_DB; 
    } else { 
     throw new Exception('unknown db'); 
    } 
    return mysqli_connect($host, USER, PASSWORD, $db); 
} 


$maindb = db_connect("main"); 
$statsdb = db_connect("stats"); 
+0

main 또는 stats 이외의 다른 $가 있으면 오류가 발생하며 데이터베이스 (MAIN_DB 및 STATS_DB)의 선택도 수정해야합니다. – Zombaya

+0

점을 가져오고 답변이 수정되었습니다. 고마워! – adrien

0

괜찮을 것 같습니다. 대안으로 식별자 대신 객체를 조작하기 위해 함수 대신 mysqli 클래스를 사용하는 방법이 있습니다.

0

당신은 배열에 databaseconfigs를 저장하고 사용할 수 있습니다. 그것이 codeigniter가하는 방법입니다. 당신이 연관 배열 작업 및 상수와 함께 작업하는 것을 선호하지 않으려면

function get_database_config(){ 
    $config['main']['hostname'] = "host1"; 
    $config['main']['user']  = "user1"; 
    $config['main']['password'] = "pass1"; 
    $config['main']['database'] = "database1"; 

    $config['stats']['hostname'] = "host2"; 
    $config['stats']['user']  = "user2"; 
    $config['stats']['password'] = "pass2"; 
    $config['stats']['database'] = "database2"; 

    return $config; 
} 

function db_connect($db) 
{ 
    $config = get_database_config(); 
    return mysqli_connect( 
      $config[$db]['hostname'], 
      $config[$db]['user'], 
      $config[$db]['password'], 
      $config[$db]['database'] 
    ); 
} 

, 당신은 MAIN_HOSTNAME, STATS_HOSTNAME, ...로 상수의 이름을 지정하고 mysqli_connect에 대한 입력으로 constant($which . '_HOSTNAME')을 사용할 수 있습니다().

관련 문제