CodeIgniter Active Record: 삽입, 업데이트, 삭제 쿼리

⚡ 스마트 요약

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

  • 🔗 핵심 아이디어: Active Record는 삽입, 가져오기, 업데이트 및 삭제와 같은 메서드 호출에 SQL을 래핑합니다.
  • 🛡️ 안전한: 값은 매개변수로 전달되므로 SQL 인젝션 공격을 방지할 수 있습니다.
  • 🔄 가지고 다닐 수 있는: 동일한 코드가 모든 곳에서 작동합니다. MySQLSQL Server 및 기타 데이터베이스 드라이버를 통해 사용할 수 있습니다.
  • ⚙️ 설정 : database.php 파일을 구성하고 데이터베이스 라이브러리를 자동 로드하세요.
  • 삽입 : `$this->db->insert('table', $data)`는 INSERT 문을 생성하고 실행합니다.
  • 🔍 고르다: `$this->db->get('table')`은 반복할 행을 반환합니다.
  • ✏️ 업데이트 및 삭제: WHERE 절과 UPDATE 또는 DELETE 절을 함께 사용하면 행이 변경되거나 삭제됩니다.

CodeIgniter Active Record CRUD

데이터는 대부분의 애플리케이션의 핵심입니다. 데이터를 저장해야만 분석을 통해 통찰력을 얻고 비즈니스 의사 결정을 내릴 수 있습니다. 데이터는 일반적으로 데이터베이스에 저장됩니다. 데이터베이스와의 상호 작용 시 주요 고려 사항으로는 보안, 접근 용이성, 그리고 데이터베이스 공급업체별로 구현된 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 테이블을 확인해 보세요. 아래 이미지와 같이 새로 생성된 행을 볼 수 있습니다.

Active Record를 통해 새 주문 행이 삽입되었습니다.

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웹 브라우저에서 다음과 유사한 결과를 볼 수 있을 것입니다.

Active Record를 통해 선택된 주문 목록

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.

자주 묻는 질문

Active Record는 값을 SQL 문자열에 연결하는 대신 매개변수로 바인딩하므로 사용자 입력으로 쿼리 구조를 변경할 수 없습니다.ping 삽입, 업데이트 및 WHERE 절에서는 자동으로 처리됩니다.

예. Active Record는 각 엔진용 드라이버를 통해 SQL을 생성하므로, 전환 시 문제가 발생할 수 있습니다. MySQL 일반적으로 SQL Server로 변경하려면 모델 코드가 아닌 구성을 변경해야 하며, 단 공급업체별 SQL 구문을 사용하지 않아야 합니다.

WHERE 절은 해당 구문이 영향을 미치는 행을 제한합니다. WHERE 절이 없으면 업데이트 또는 삭제 작업이 테이블의 모든 행에 대해 실행되므로, 이는 흔히 발생하는 비용이 많이 드는 오류입니다.

예. AI는 SELECT, INSERT, UPDATE 또는 DELETE 문을 동일한 get, insert, update 또는 delete 체인으로 다시 작성할 수 있습니다. 복잡한 조인의 경우 간단한 Active Record보다는 쿼리 빌더가 필요할 수 있으므로 결과를 테스트해 보세요.

데이터베이스 라이브러리를 자동 로딩하면 매번 로드하지 않고도 모든 컨트롤러와 모델에서 `$this->db`를 사용할 수 있습니다. 이는 애플리케이션의 대부분이 데이터베이스와 통신하는 경우에 매우 편리합니다.

이 게시물을 요약하면 다음과 같습니다.