728x90


이제 database만 연동하면 그럴싸한 웹 사이트를 하나 제작할 수 있을 것이다.

물론 아직 세션과 쿠키등이 남아있긴 하지만 혼자 쓰는 개인홈피라면 필요 없을 수도 있다.

개인적으로 딴건 모르겠지만 codeigniter의 장점은 database와 연동하는게 가장 직관적이고 쉽다는 것이다.

필자가 다른언어에서 연동할때는 조금 짜증나는 점이 많았는데 codeigniter는 그거하나는 장점인것 같다.

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

$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => '',
'password' => '',
'database' => '',
'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
);

위의 코드는 application/config/database.php파일 내부의 일부이다.

여기서 설정을 해주는 것이다. 여기서 필자는 mariadb를 연동할 것인데 만약 연동한다면 아래와 같은 방식으로 사용하면된다.


$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'mydb',
'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,
'port' => 3307
);

hostname은 연결하려는 ip주소이고 username은 db의 user이름이다.

어짜피 직관적이게 적혀있으므로 설명이 크게 필요없다.

여기서 중요한건 두개인데 dbdriver부분과 port부분이다.

dbdriver는 mysql의 경우 mysqli라고 하면된다.

필자의 경우 mariadb를 사용하는데 이 역시 커넥터가 mysqli이므로 똑같이 사용해준다.

마지막의 port부분은 원래 없었는데 없이 적으면 그 커넥터에서 db가 원래 설정하는 기본포트로 한다.

mysql같은 경우 아마 3306포트가 될것이다.

필자는 mariadb포트를 3307로 바꿔났기에 적은것이다.

여러분도 기본 포트와 설정이 바뀌었다면 바꾸어야한다.


$autoload['libraries'] = array('database');

application/config/autoload.php에서 libraries의 원소로 'database'를 추가하면 후에 db를 따로 연결안해도 자동 연결된다.

호불호가 갈리는 기능인데 사실 db를 auto로 사용하는건 바람직 하지 않다.

가뜩이나 쌩 인터프리터로 속도를 잡아먹는 php가 더더욱 느려지기 때문이다.

그러나 작게 테스트를 하거나 페이지가 워낙 작다면 사용해볾직한 기능이다.

아래의 예제는 이 autoload를 사용하지 않는다는 전제하에 진행하겠다.


class DatabaseConnection extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->database();
}

public function index()
{
$result = $this->db->query('select * from member')->result();
foreach ($result as $item) {
echo $item->name.'<br>';
}

}
}

마지막으로 사용할 Controller에서 생성자에서 databse를 로드해준다.

그러면 database.php에 설정한 설정 그대로 파일이 로드가 된다.

이제 이 파일을 db라는 이름으로 꺼내 사용할 수 있다.

그 다음 db의 query라는 메소드를 사용하면 결과를 받아온다. 그리고 그 결과값을 result메소드로 받는다.

이 result메소드로 값을 받으면 값을 클래스로 받게된다.

만약 연관배열로 받고싶다면 아래처럼 코드를 수정하자.


class DatabaseConnection extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->database();
}

public function index()
{
$result = $this->db->query('select * from member')->result_array();
foreach ($result as $item) {
echo $item['name'].'<br>';
}

}
}

이제 실행해보자.



실행하면 name값을 빼서 도출해내야 할 것이다.



원하는데로 값이 출력됨을 확인할 수 있다.




+ Recent posts