ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CodeIgniter] 다수의 데이터베이스(Database) 사용하기
    프로그래밍/CodeIgniter 2018. 5. 27. 19:12

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



    ▶설명



    이전에 데이터베이스(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


    댓글

Designed by Tistory.