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

반응형