CodeIgniter Active Record: Truy vấn Chèn, Cập nhật, Xóa
⚡ Tóm tắt thông minh
CodeIgniter Active Record là một mẫu thiết kế cho phép mô hình đọc và ghi vào cơ sở dữ liệu bằng các chuỗi phương thức đơn giản và an toàn. Nó hỗ trợ các thao tác chèn, chọn, cập nhật và xóa trên các công cụ cơ sở dữ liệu khác nhau mà không cần viết lại mã, và nó tham số hóa đầu vào để ngăn chặn tấn công SQL injection.

Dữ liệu là huyết mạch của hầu hết các ứng dụng. Nó cần được lưu trữ để có thể phân tích, từ đó cung cấp thông tin chi tiết và hỗ trợ các quyết định kinh doanh. Dữ liệu thường được lưu trữ trong cơ sở dữ liệu. Một trong những mối quan ngại chính khi tương tác với cơ sở dữ liệu là bảo mật, tính dễ truy cập và việc triển khai Ngôn ngữ truy vấn có cấu trúc (SQL) cụ thể của nhà cung cấp cơ sở dữ liệu.
Active Record là một mẫu thiết kế giúp tương tác với cơ sở dữ liệu một cách dễ dàng, an toàn và hiệu quả. Active Record có những ưu điểm sau:
- Chèn, cập nhật và xóa bản ghi bằng chuỗi phương thức đơn giản.
- Gửi dữ liệu do người dùng nhập vào một cách an toàn bằng cách sử dụng các tham số.
- Cho phép bạn làm việc với nhiều công cụ cơ sở dữ liệu như MySQL và SQL Server mà không cần viết lại mã ứng dụng.
- CodeIgniter sử dụng các trình điều khiển dành riêng cho từng công cụ cơ sở dữ liệu ở chế độ nền.
Cách sử dụng Active Record: Ví dụ
Trong hướng dẫn này, chúng ta sẽ sử dụng một cơ sở dữ liệu mẫu với hai bảng, một bảng chứa đơn đặt hàng và một bảng chứa chi tiết. Hướng dẫn này giả định bạn đã có sẵn... MySQL Cơ sở dữ liệu đã được cài đặt và đang chạy. Hãy chạy các tập lệnh sau để tạo cơ sở dữ liệu hướng dẫn:
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;
Đoạn mã trên tạo một cơ sở dữ liệu có tên là ci_active_record và hai bảng, orders và order_details. Mối quan hệ giữa hai bảng được xác định bởi cột id trong bảng orders và order_id trong bảng order_details.
CodeCấu hình cơ sở dữ liệu Igniter
Bây giờ chúng ta sẽ cấu hình ứng dụng để giao tiếp với cơ sở dữ liệu này. Mở tệp cấu hình cơ sở dữ liệu nằm trong thư mục application/config/database.php và tìm các dòng sau:
'hostname' => 'localhost', 'username' => '', 'password' => '', 'database' => '',
Cập nhật đoạn mã trên thành đoạn mã sau:
'hostname' => 'localhost', 'username' => 'root', 'password' => 'letmein', 'database' => 'ci_active_record',
Lưu ý: Bạn cần thay thế tên người dùng và mật khẩu bằng thông tin trùng khớp với tài khoản của mình. MySQL cấu hình.
Ngoài các chi tiết cấu hình cơ sở dữ liệu, chúng ta cũng cần phải nói với ai đó rằng: CodeIgniter sẽ tải thư viện cơ sở dữ liệu khi nó được khởi chạy.
Bước 1) Mở tệp sau: application/config/autoload.php.
Bước 2) Tìm các thư viện khóa mảng `$autoload` và tải thư viện cơ sở dữ liệu như hình bên dưới:
$autoload['libraries'] = array('database');
Đây:
- Đoạn mã trên tải thư viện cơ sở dữ liệu khi ứng dụng khởi chạy.
CodeIgniter Chèn Bản Ghi Hoạt Động
Để phục vụ mục đích thử nghiệm, chúng ta sẽ tạo một controller và định nghĩa các route để tương tác với ứng dụng thông qua Active Record. Tạo một file mới tại application/controllers/ActiveRecordController.php và thêm đoạn mã sau:
<?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'; } }
Đây:
- $data = […] định nghĩa một biến mảng data sử dụng tên cột của bảng cơ sở dữ liệu làm khóa mảng và gán giá trị cho chúng.
- `$this->db->insert('orders', $data);` gọi phương thức `insert` của thư viện cơ sở dữ liệu, truyền vào tên bảng `orders` và biến mảng `$data`. Dòng lệnh này tạo ra câu lệnh SQL `INSERT` sử dụng các khóa của mảng làm tên trường và các giá trị của mảng làm giá trị cần chèn.
Bây giờ chúng ta đã tạo phương thức điều khiển, chúng ta cần tạo một tuyến đường mà chúng ta sẽ gọi để thực thi nó. Mở tệp application/config/routes.php và thêm dòng sau:
$route['ar/insert'] = 'activerecordcontroller/store_order';
Đây:
- Chúng ta định nghĩa một route ar/insert gọi phương thức store_order của ActiveRecordController.
Bây giờ chúng ta hãy khởi động máy chủ web để kiểm tra phương pháp của mình. Chạy lệnh sau để khởi động máy chủ PHP tích hợp sẵn:
cd C:\Sites\ci-app php -S localhost:3000
Đây:
- Lệnh trên sẽ điều hướng đến thư mục dự án và khởi động máy chủ tích hợp sẵn tại cổng 3000.
Tải các mục sau URL vào trình duyệt của bạn: http://localhost:3000/ar/insert. Bạn sẽ nhận được kết quả sau:
order has successfully been created
Mở MySQL Truy cập cơ sở dữ liệu hướng dẫn và kiểm tra bảng đơn đặt hàng. Bạn sẽ thấy hàng mới được tạo, như hình bên dưới:
CodeIgniter Select Active Record
Trong phần này, chúng ta sẽ xem cách đọc các bản ghi trong cơ sở dữ liệu và hiển thị chúng trên trình duyệt web dưới dạng danh sách không có thứ tự. Thêm phương thức sau vào 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>"; }
Đây:
- $query = $this->db->get('orders'); thực thi truy vấn select trên bảng orders, chọn tất cả các trường.
- tiếng vang “ Danh sách đơn hàng ”; hiển thị tiêu đề HTML.
- tiếng vang “ ”; in ra thẻ mở cho một danh sách HTML không có thứ tự.
- vòng lặp foreach ($query->result() as $row) {…} duyệt qua các kết quả trả về từ cơ sở dữ liệu và echo “ $row->customer_name ”; in ra tên khách hàng.
Trước khi bạn tải URLBạn có thể thêm một vài bản ghi nữa vào cơ sở dữ liệu. Bây giờ, hãy định nghĩa một tuyến đường cho truy vấn SELECT. Mở application/config/routes.php và thêm tuyến đường sau:
$route['ar'] = 'activerecordcontroller';
Đây:
- Tuyến đường `ar` trỏ đến phương thức `index` của lớp `ActiveRecordController`. Đây là mặc định, đó là lý do tại sao chúng ta không chỉ định phương thức `index`, như chúng ta đã làm với tuyến đường chèn bản ghi.
Giả sử máy chủ web đã hoạt động, hãy tải các tệp sau: URL: http://localhost:3000/arBạn sẽ thấy kết quả tương tự như sau trên trình duyệt web của mình:
CodeCập nhật Active Record của Igniter
Trong phần này, chúng ta sẽ tìm hiểu cách sử dụng Active Record để cập nhật cơ sở dữ liệu. Giả sử chúng ta muốn cập nhật tên khách hàng Joe Thomas thành Joe. Hãy thêm phương thức sau vào lớp 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'; }
Đây:
- $data = […] xác định các trường và giá trị mà chúng ta muốn cập nhật trong bảng cơ sở dữ liệu.
- $this->db->where('id', 1); thiết lập mệnh đề where cho truy vấn cập nhật.
- $this->db->update('orders', $data); tạo truy vấn cập nhật SQL và thực thi nó dựa trên cơ sở dữ liệu của chúng tôi.
Đoạn mã trên tạo ra câu lệnh SQL sau:
UPDATE orders SET customer_name = 'Joe' WHERE id = 1;
Bây giờ chúng ta hãy cập nhật tệp application/config/routes.php và thêm tuyến đường sau:
$route['ar/update'] = 'activerecordcontroller/update_order';
Lưu các thay đổi và tải tệp sau. URL trong trình duyệt web:
Bây giờ chúng ta hãy hiển thị các bản ghi trong cơ sở dữ liệu và xem liệu thay đổi đã có hiệu lực hay chưa.
Như bạn có thể thấy từ hình ảnh phía trên, thông tin đầu tiên đã được cập nhật từ Joe Thomas thành Joe.
CodeIgniter Xóa bản ghi hoạt động
Bây giờ chúng ta sẽ xóa một bản ghi khỏi cơ sở dữ liệu. Chúng ta sẽ xóa bản ghi có ID là 3. Thêm phương thức sau vào ActiveRecordController:
public function delete_order() { $this->db->where('id', 3); $this->db->delete('orders'); echo 'order has successfully been deleted'; }
Đây:
- $this->db->where('id', 3); thiết lập mệnh đề where.
- $this->db->delete('orders'); xóa hàng trong bảng orders dựa trên các tiêu chí được thiết lập bằng mệnh đề where.
Để thực thi đoạn mã trên, hãy tải các tệp sau: URL trong trình duyệt web của bạn: http://localhost:3000/ar/delete.




