-
[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
'프로그래밍 > CodeIgniter' 카테고리의 다른 글
[CodeIgniter] 데이터베이스(Database) 쿼리 함수 (1) 2018.08.19 [CodeIgniter] 데이터베이스(Database) 쿼리 실행 및 결과 생성 (0) 2018.05.29 [CodeIgniter] 데이터베이스(Database) 시작하기 (2) 2018.04.22 [CodeIgniter] 모델 (Models) (3) 2018.04.08 [CodeIgniter] 뷰 (Views) (2) 2018.03.05