평범한 이야기들

[PHP] Codeigniter (코드이그나이터) 데이터베이스 클래스 #1 본문

평범한 개발 이야기/PHP

[PHP] Codeigniter (코드이그나이터) 데이터베이스 클래스 #1

songsariya 2014. 12. 27. 11:27
728x90



CI의 데이터베이스 클래스에 대해서 정리할려고 합니다.

이미 모델 부분에서 조금 접해 보았습니다만 따로 정리를 하고자 함 입니다.



1. 데이터베이스 설정


Application/config/database.php 파일을 수정해야합니다.


hostname : 데이터베이스 서버의 주소

username : 데이터베이스 사용자의 이름

password : 데이터베이스 비밀번호

database : 데이터베이스 명

dbdriver : 데이터베이스의 종류로 지원되는 드라이브의 목록은 system/database/drivers 디렉토리명을 참고한다.


※주의사항

데이터베이스 설정 파일에는 데이터베이스 서버에 접속 할 수 있는 정보를 그대로 입력하기 때문에

노출되서는 안됩니다. 따라서 버전관리를 사용하실때에는 제외해야합니다.



2. 데이터베이스 라이브러리 로드


CI에서 데이터베이스를 사용하기 위해서는 먼저 데이터베이스 라이브러리를 로드해야합니다.

CI에서는 2가지 방법을 제공해주고 있습니다.


1. application/config/autoload.php 파일의 $autoload['libraries'] 배열에 'database'를 추가한다. 

2. controller 내에서 $this->load->database()를 호출한다.


※저는 2번째 방법으로 진행했습니다.


2번경의 경우로는 DSN을 설정해서 접근할 수도 있습니다.


$dsn = 'dbdriver://username:password@hostname/database';

$this->load->database($dsn);


여러 데이터베이스를 연결하기 위해서는 아래와 같이 하시면 됩니다.


$DB1 = $this->load->database('group_one', TRUE);

$DB2 = $this->load->database('group_two', TRUE);


두번째 파라미터를 TRUE로 넘겨주면 데이터베이스 객체를 리턴합니다.

따라서 일반적인 방법이 아니라 객체이름을 이용한 방법을 사용 할 수 있습니다.


일반적인방법:

$this->db->query();

$this->db->result();


객체이름을 이용한 방법 :

$DB1->query();

$DB1->result();


데이터베이스의 재연결(연결유지) 와 수동으로 데이터베이스를 닫는 방법은 아래와 같습니다.


$this->db->reconnect();  //재연결

$this->db->close();        //수동으로 닫기



3. 데이터베이스 단순 사용방법


단순한 쿼리를 사용하기위해서는 아래와 같이 합니다.


$this->db->query("SELECT * FROM test");



쿼리의 결과를 가져오려면 아래와 같이 하시면 됩니다.


$this->db->query("SELECT * FROM test")->result();


쿼리의 결과를 배열인덱스를 사용한 배열로 가져오기 위해선 아래와 같이 하시면 됩니다.


$this->db->query("SELECT * FROM test")->result_array();


쿼리의 단일 결과를 가져오기 위해서는 아래와 같이 하면 됩니다.


$this->db->query("SELECT * FROM test LIMIT 1")->row();  또는 row_array();

반환하는 형태를 지정해주는 것



4. 쿼리 이스케이프 하기


$this->db->escape(); 이 함수는 문자열형에만 자동으로 ' (single quotes)를 붙여줍니다.


$this->db->escape_str(); 이 함수는 데이터형에 상관없이 이스케이프 시킵니다. 이 함수를 사용하는것이 더 좋습니다.


사용 예

$sql = "INSERT INTO 테이블명 (title) VALUES ('" . $this->db->escape_str($title) . "')";



5. 쿼리 바인딩


CI는 쿼리 바인딩을 지원해줍니다. 아래 예제를 보시면 쉽습니다.


$strQuery = "SELECT * FROM 테이블명 WHERE id = ? AND title = ? AND name = ?"; 


$this->db->query($sql, array(3, '제목입니다', 'ssongsari'));


쿼리안에 있는 물음표는 자동으로 두번째 파라미터로 전달되는 배열의 값으로 치환됩니다. 바인딩으로 사용하면 값이 자동으로 이스케이프 되기 때문에 수동으로 이스케이프 하는 수고를 덜어줍니다.





728x90
Comments