일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 맥
- upbit
- 프레임워크
- 20.04
- Laravel
- Ubuntu 20.04
- php
- FMS
- 우분투 20.04
- 옵지
- 옵티머스g
- 라라벨
- Selenium
- 우분투
- 셀레니움
- codeigniter
- 옵G
- 회고
- TiL
- 맛집
- ubuntu
- 코드이그나이터
- 라즈비안
- Raspberry Pi
- MySQL
- 옵티머스 g
- 제주도
- 라즈베리파이
- C
- 업비트
- Today
- Total
평범한 이야기들
[PHP] Codeigniter (코드이그나이터) 데이터베이스 클래스 #1 본문
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'));
쿼리안에 있는 물음표는 자동으로 두번째 파라미터로 전달되는 배열의 값으로 치환됩니다. 바인딩으로 사용하면 값이 자동으로 이스케이프 되기 때문에 수동으로 이스케이프 하는 수고를 덜어줍니다.