CodeIgniter 다수의 데이터베이스(Database) 사용하기

2023. 7. 12. 11:28카테고리 없음

반응형

설명


 

이전에 데이터베이스(Database) 시작하기에 이어서,

다수의 데이터베이스를 사용하는 법을 알아보도록 하겠습니다.

 

예제는 두 개의 데이터베이스를 기준으로 설명하겠습니다.

정말 간단합니다.

 

▶준비하기


 

첫번째 데이터베이스(Database)에 members 테이블 추가 및 데이터 입력 (db1 데이터베이스)

-- 테이블 추가
CREATE TABLE `members` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `name` varchar(128) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 데이터 추가
INSERT INTO members (name) VALUES ('Edward') , ('Alex');

 

테이블 데이터 확인

 id name 
 1  Edward 
  2  Alex 

 

 

두번째 데이터베이스(Database)에 members 테이블 추가 및 데이터 입력 (db2 데이터베이스)

-- 테이블 추가
CREATE TABLE `members` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
    `name` varchar(128) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 데이터 추가
INSERT INTO members (name) VALUES ('John') , ('Ash');

 

테이블 데이터 확인

 id name 
 1  John 
  2  Ash 

 

▶예제 (Example)


 

데이터베이스(Database) 값 설정

application/config/database.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
// ...... Database Setting Comment

$active_group = 'default';
$query_builder = TRUE;

// ...... Default Setting

$db['db1'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => 'dev1',
	'password' => 'test1234',
	'database' => 'db1',
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);

$db['db2'] = array(
	'dsn'	=> '',
	'hostname' => 'localhost',
	'username' => 'dev2',
	'password' => 'test1234',
	'database' => 'db2',
	'dbdriver' => 'mysqli',
	'dbprefix' => '',
	'pconnect' => FALSE,
	'db_debug' => (ENVIRONMENT !== 'production'),
	'cache_on' => FALSE,
	'cachedir' => '',
	'char_set' => 'utf8',
	'dbcollat' => 'utf8_general_ci',
	'swap_pre' => '',
	'encrypt' => FALSE,
	'compress' => FALSE,
	'stricton' => FALSE,
	'failover' => array(),
	'save_queries' => TRUE
);

db배열 안에 데이터베이스(Database) 연결 값을 설정합니다.

각각 db1과 db2로 구분하였습니다.

 

모델(Models) 수정

application/models/Member_model.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
    
class Member_model extends CI_Model {
    
    public function __construct()
    {
        parent::__construct();
        $this->db1 = $this->load->database('db1', true);
        $this->db2 = $this->load->database('db2', true);
    }

    // ...... GetMembers method
    
    public function GetMembersByDB1()
    {
        $result = $this->db1->query('SELECT id, name FROM members')->result();
        $this->db1->close();

        return $result;
    }
    
    public function GetMembersByDB2()
    {
        $result = $this->db2->query('SELECT id, name FROM members')->result();
        $this->db2->close();

        return $result;
    }
}
  • 9번째줄 :  db1 데이터베이스(Database) 설정에 맞추어 데이터베이스를 로드하여 db1 변수에 저장합니다. (두 번째 파라미터를 TRUE로 반환하기 때문에 함수는 데이터베이스 객체를 리턴합니다.)
  • 10번째줄 :  db2 데이터베이스(Database) 설정에 맞추어 데이터베이스를 로드하여 db2 변수에 저장합니다. (두 번째 파라미터를 TRUE로 반환하기 때문에 함수는 데이터베이스 객체를 리턴합니다.)
  • 17번째줄 : db1 데이터베이스(Database)에 쿼리를 보내고 그 결과를 객체(Object)로 반환 해 주는 코드입니다.
  • 18번째줄 : 수동으로 db1 데이터베이스(Database) 연결을 끊어주는 코드입니다.
  • 25번째줄 : db2 데이터베이스(Database)에 쿼리를 보내고 그 결과를 객체(Object)로 반환 해 주는 코드입니다.
  • 26번째줄 : 수동으로 db2 데이터베이스(Database) 연결을 끊어주는 코드입니다.

 

컨트롤러(Controllers) 수정

application/controllers/Tutorial.php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
    
class Tutorial extends CI_Controller {
    
  // ...... 기존 예제 코드는 생략하겠습니다.

    public function members_db1()
    {
        $this->load->model('Tutorial/Member_model');
        
        $data['members'] = $this->Member_model->GetMembersByDB1();

        $this->load->view('Tutorial/members', $data);
    }
    
    public function members_db2()
    {
        $this->load->model('Tutorial/Member_model');
        
        $data['members'] = $this->Member_model->GetMembersByDB2();

        $this->load->view('Tutorial/members', $data);
    }
}

 

뷰(Views) : 이전 [데이터베이스 시작하기]와 변경 사항이 없습니다.

application/views/Tutorial/members.php

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Member</title>
</head>
<body>
    <table>
        <thead>
            <tr>
                <th>ID</th>
                <th>Name</th>
            </tr>
        </thead>
        <tbody>
            <?php foreach($members as $member) :?>
                <tr>
                    <td><?=$member->id?></td>
                    <td><?=$member->name?></td>
                </tr>
            <?php endforeach ?>
        </tbody>
    </table>
</body>
</html>

 

확인

http://localhost/ci/Tutorial/Members_db1

 

http://localhost/ci/Tutorial/Members_db2

 

반응형