CodeIgniter Active Record: 삽입, 업데이트, 삭제 쿼리
⚡ 스마트 요약
CodeIgniter Active Record는 모델이 간단하고 안전한 메서드 체인을 사용하여 데이터베이스를 읽고 쓸 수 있도록 하는 디자인 패턴입니다. 코드를 다시 작성하지 않고도 다양한 데이터베이스 엔진에서 삽입, 선택, 업데이트 및 삭제 작업을 지원하며, SQL 인젝션을 방지하기 위해 입력값을 매개변수화합니다.

데이터는 대부분의 애플리케이션의 핵심입니다. 데이터를 저장해야만 분석을 통해 통찰력을 얻고 비즈니스 의사 결정을 내릴 수 있습니다. 데이터는 일반적으로 데이터베이스에 저장됩니다. 데이터베이스와의 상호 작용 시 주요 고려 사항으로는 보안, 접근 용이성, 그리고 데이터베이스 공급업체별로 구현된 SQL(정형화 질의 언어) 방식 등이 있습니다.
액티브 레코드는 데이터베이스와 안전하고 간결한 방식으로 상호 작용할 수 있도록 설계된 디자인 패턴입니다. 액티브 레코드는 다음과 같은 장점을 가지고 있습니다.
- 간단한 메서드 체인을 사용하여 레코드를 삽입, 업데이트 및 삭제할 수 있습니다.
- 매개변수를 사용하여 사용자 입력을 안전하게 제출합니다.
- 다음과 같은 여러 데이터베이스 엔진으로 작업할 수 있습니다. MySQL 애플리케이션 코드를 다시 작성하지 않고도 SQL Server를 사용할 수 있습니다.
- CodeIgniter는 백그라운드에서 각 데이터베이스 엔진에 특화된 드라이버를 사용합니다.
Active Record 사용 방법: 예제
이 튜토리얼에서는 주문 정보와 상세 정보를 저장하는 두 개의 테이블로 구성된 샘플 데이터베이스를 사용합니다. 이 튜토리얼을 진행하기 전에 다음 사항을 가정합니다. MySQL 데이터베이스가 설치되어 실행 중입니다. 다음 스크립트를 실행하여 튜토리얼 데이터베이스를 생성하세요.
CREATE SCHEMA ci_active_record; USE ci_active_record; CREATE TABLE `order_details` ( `id` int(11) NOT NULL AUTO_INCREMENT, `order_id` int(11) DEFAULT NULL, `item` varchar(245) DEFAULT NULL, `quantity` int(11) DEFAULT '0', `price` decimal(10,2) DEFAULT '0.00', `sub_total` decimal(10,2) DEFAULT '0.00', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT = 1; CREATE TABLE `orders` ( `id` int(11) NOT NULL AUTO_INCREMENT, `date` timestamp NULL DEFAULT NULL, `customer_name` varchar(245) DEFAULT NULL, `customer_address` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT = 1;
위 코드는 ci_active_record라는 데이터베이스와 orders 및 order_details라는 두 개의 테이블을 생성합니다. 두 테이블 간의 관계는 orders 테이블의 id 열과 order_details 테이블의 order_id 열을 통해 정의됩니다.
CodeIgniter 데이터베이스 구성
이제 애플리케이션이 이 데이터베이스와 통신하도록 구성하겠습니다. application/config/database.php에 있는 데이터베이스 구성 파일을 열고 다음 줄을 찾으십시오.
'hostname' => 'localhost', 'username' => '', 'password' => '', 'database' => '',
위 코드를 다음과 같이 수정하세요:
'hostname' => 'localhost', 'username' => 'root', 'password' => 'letmein', 'database' => 'ci_active_record',
참고 : 사용자 이름과 비밀번호를 본인의 계정에 맞는 것으로 바꿔야 합니다. MySQL 구성.
데이터베이스 구성 세부 정보 외에도 다음 사항을 알려주셔야 합니다. CodeIgniter가 로드될 때 데이터베이스 라이브러리도 함께 로드합니다.
단계 1) 다음 파일(application/config/autoload.php)을 엽니다.
단계 2) $autoload 배열 키 라이브러리를 찾고 아래와 같이 데이터베이스 라이브러리를 로드하십시오.
$autoload['libraries'] = array('database');
이리:
- 위 코드는 애플리케이션이 시작될 때 데이터베이스 라이브러리를 로드합니다.
CodeIgniter 삽입 활성 레코드
테스트 목적으로 Active Record를 통해 애플리케이션과 상호 작용하는 컨트롤러와 라우트를 정의하겠습니다. application/controllers/ActiveRecordController.php라는 새 파일을 만들고 다음 코드를 추가하세요.
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class ActiveRecordController extends CI_Controller { public function store_order(){ $data = [ 'date' => '2018-12-19', 'customer_name' => 'Joe Thomas', 'customer_address' => 'US' ]; $this->db->insert('orders', $data); echo 'order has successfully been created'; } }
이리:
- $data = […]는 데이터베이스 테이블 열 이름을 배열 키로 사용하고 해당 키에 값을 할당하는 배열 변수 data를 정의합니다.
- `$this->db->insert('orders', $data);`는 데이터베이스 라이브러리의 `insert` 메서드를 호출하며, 테이블 이름 `orders`와 배열 변수 `$data`를 전달합니다. 이 코드는 배열의 키를 필드 이름으로, 배열의 값을 삽입할 값으로 사용하여 SQL INSERT 문을 생성합니다.
컨트롤러 메서드를 만들었으니 이제 해당 메서드를 실행할 경로를 만들어야 합니다. application/config/routes.php 파일을 열고 다음 줄을 추가하세요.
$route['ar/insert'] = 'activerecordcontroller/store_order';
이리:
- 우리는 ActiveRecordController의 store_order 메서드를 호출하는 ar/insert 경로를 정의합니다.
이제 웹 서버를 시작하여 우리의 방법을 테스트해 보겠습니다. 다음 명령어를 실행하여 내장 PHP 서버를 시작하세요.
cd C:\Sites\ci-app php -S localhost:3000
이리:
- 위 명령어는 프로젝트 디렉토리로 이동하여 내장 서버를 3000번 포트에서 시작합니다.
다음을 로드하세요 URL 브라우저에 입력하세요: http://localhost:3000/ar/insert. 다음과 같은 결과를 얻을 수 있습니다.
order has successfully been created
열기 MySQL 튜토리얼 데이터베이스에서 orders 테이블을 확인해 보세요. 아래 이미지와 같이 새로 생성된 행을 볼 수 있습니다.
CodeIgniter Select Active Record
이 섹션에서는 데이터베이스의 레코드를 읽어 웹 브라우저에 순서 없는 목록으로 표시하는 방법을 살펴보겠습니다. ActiveRecordController에 다음 메서드를 추가하세요.
public function index() { $query = $this->db->get('orders'); echo "<h3>Orders Listing</h3>"; echo "<ul>"; foreach ($query->result() as $row) { echo "<li>$row->customer_name</li>"; } echo "</ul>"; }
이리:
- `$query = $this->db->get('orders');`는 orders 테이블에 대해 모든 필드를 선택하는 SELECT 쿼리를 실행합니다.
- 메아리 “ 주문 목록 ”; HTML 제목을 표시합니다.
- 메아리 “ ”; 순서 없는 HTML 목록의 시작 태그를 출력합니다.
- foreach ($query->result() as $row) {…}는 데이터베이스에서 반환된 결과를 순회하며 "를 출력합니다. $row->고객_이름 "; 고객 이름을 출력합니다.
로드하기 전에 URL데이터베이스에 레코드를 몇 개 더 추가할 수 있습니다. 이제 SELECT 쿼리에 대한 경로를 정의해 보겠습니다. application/config/routes.php 파일을 열고 다음 경로를 추가하세요.
$route['ar'] = 'activerecordcontroller';
이리:
- 경로 ar은 ActiveRecordController 클래스의 index 메서드를 가리킵니다. 이는 기본값이므로 레코드를 삽입하는 경로에서처럼 index 메서드를 지정하지 않았습니다.
웹 서버가 이미 실행 중이라고 가정하고 다음 내용을 로드하십시오. URL: http://localhost:3000/ar웹 브라우저에서 다음과 유사한 결과를 볼 수 있을 것입니다.
CodeIgniter 업데이트 활성 레코드
이 섹션에서는 Active Record를 사용하여 데이터베이스를 업데이트하는 방법에 대해 설명합니다. 고객 이름 Joe Thomas를 Joe로 업데이트한다고 가정해 보겠습니다. ActiveRecordController 클래스에 다음 메서드를 추가합니다.
public function update_order() { $data = [ 'customer_name' => 'Joe', ]; $this->db->where('id', 1); $this->db->update('orders', $data); echo 'order has successfully been updated'; }
이리:
- $data = […]는 데이터베이스 테이블에서 업데이트하려는 필드와 값을 정의합니다.
- `$this->db->where('id', 1);`는 업데이트 쿼리의 WHERE 절을 설정합니다.
- $this->db->update('주문', $data); SQL 업데이트 쿼리를 생성하고 데이터베이스에 대해 실행합니다.
위 코드는 다음과 같은 SQL 문을 생성합니다.
UPDATE orders SET customer_name = 'Joe' WHERE id = 1;
이제 application/config/routes.php 파일을 업데이트하고 다음 경로를 추가해 보겠습니다.
$route['ar/update'] = 'activerecordcontroller/update_order';
변경 사항을 저장하고 다음을 로드하세요. URL 웹 브라우저에서:
이제 데이터베이스 기록을 표시하여 변경 사항이 적용되었는지 확인해 보겠습니다.
위 이미지에서 보시는 바와 같이 첫 번째 기록의 이름이 Joe Thomas에서 Joe로 수정되었습니다.
CodeIgniter에서 활성 레코드 삭제
이제 데이터베이스에서 레코드를 삭제해 보겠습니다. ID가 3인 레코드를 삭제합니다. ActiveRecordController에 다음 메서드를 추가하세요.
public function delete_order() { $this->db->where('id', 3); $this->db->delete('orders'); echo 'order has successfully been deleted'; }
이리:
- $this->db->where('id', 3);는 WHERE 절을 설정합니다.
- `$this->db->delete('orders');`는 WHERE 절을 사용하여 설정한 조건에 따라 orders 테이블에서 해당 행을 삭제합니다.
위 코드를 실행하려면 다음을 로드하십시오. URL 웹 브라우저에서: http://localhost:3000/ar/delete.




