Trong bài này mình sẽ hướng dẫn cho các bạn các thao tác với cơ sở dữ liệu trong CodeIgniter. Các thao tác cơ bản của CRUD gồm Create, Read, Update và Delete.
Giới thiệu các thao tác với cơ sở dữ liệu trong CodeIgniter
Cũng như những framework khác, chúng ta cũng cần thao tác với cơ sở dữ liệu trong codeigniter thường xuyên vì vậy CI có những thư viện giúp chúng ta thao tác dễ dàng hơn. Mình sẽ tạo một bảng Hoc_Sinh trong MySQL để ví dụ minh họa cho bài viết này gồm 2 cột như sau:
- MaHocSinh int(11) primary_key
- HoVaTen varchar(50)
Kết nối cơ sở dữ liệu
Chúng ta có thể kết nối cơ sở dữ liệu theo 2 cách:
- Kết nối tự động bằng cách cấu hình trong file application/config/autoload.php. Kết nối tự động sẽ kết nối cơ sở dữ liệu cho tất cả các trang. Chúng ta chỉ cần thêm thư viện database như sau:
$autoload['libraries'] = array('database');
- Kết nối bằng tay khi chúng ta chỉ muốn thực hiện kết nối cơ sở dữ liệu trong một vài trang. Chúng ta có thể thực hiện kết nối trong controller bằng cách như sau:
$this->load->database();
Thêm dữ liệu vào bảng
Chúng ta sẽ sử dụng hàm insert() để thêm dữ liệu vào một bảng nào đó. Cú pháp của hàm insert() như sau:
insert($table = '', $set = NULL, $escape = NULL)
Trong đó:
- $table (string) là tên bảng.
- $set (array) là mảng kết hợp chứa dữ liệu.
- $escape (bool) dùng để xác định dữ liệu có được escape không.
Hàm insert() trả về giá trị TRUE hoặc FALSE tương ứng với thao tác thêm dữ liệu có thực hiện thành công hay không. Các bạn xem ví dụ sau đây:
$data = array( 'MaHocSinh' => 1, 'HoTen' => 'Nguyen Khanh Duy' ); $this->db->insert("Hoc_Sinh", $data);
Cập nhật dữ liệu
Để cập nhật dữ liệu trong cơ sở dữ liệu, hàm update() được sử dụng cùng với hàm set() và hàm where(). Hàm set() dùng để đặt dữ liệu sẽ được cập nhật với cú pháp như sau:
set($key[, $value = ''[, $escape = NULL]])
Trong đó:
- $key (mixed) là tên cột hoặc một mảng kết hợp gồm tên cột/giá trị (field/value).
- $value (string) là giá trị của cột nếu $key là tên một cột.
- $escape (bool) xác định giá trị có được escape không.
Hàm where() có cú pháp như sau:
where($key[, $value = NULL[, $escape = NULL]])
Trong đó:
- $key (mixed) là tên cột để so sánh hoặc một mảng kết hợp.
- $value (mixed) nếu chỉ có một khóa thì so sánh với giá trị này.
- $escape (bool) xác định giá trị có được escape không.
Hàm update() có cú pháp như sau:
update([$table = ''[, $set = NULL[, $where = NULL[, $limit = NULL]]]])
Trong đó:
- $table (string) là tên bảng cần cập nhật dữ liệu.
- $set (array) một mảng kết hợp.
- $where (string) là mệnh đề WHERE trong câu SQL.
- $limit (int) là mệnh đề LIMIT trong câu SQL.
Hàm update() trả về giá trị TRUE hoặc FALSE tương ứng thao tác thực hiện thành công hay không. Ví dụ sau đây:
$data = array( 'MaHocSinh' => 1, 'HoTen' => 'Nguyen Duy' ); $this->db->set($data); $this->db->where("MaHocSinh", 1); $this->db->update("Hoc_Sinh", $data);
Ví dụ trên đây sẽ cập nhật lại dòng dữ liệu có MaHocSinh = 1 và sẽ cập nhật lại họ tên là Nguyen Duy.
Xóa dữ liệu
Để xóa dữ liệu trong cơ sở dữ liệu, hàm delete() được sử dụng. Hàm delete() có cú pháp như sau:
delete([$table = ''[, $where = ''[, $limit = NULL[, $reset_data = TRUE]]]])
Trong đó:
- $table (mixed) là một (hoặc nhiều) bảng sẽ xóa dữ liệu.
- $where (string) là mệnh đề WHERE
- $limit (int) là mệnh đề LIMIT
- $reset_data (bool) bằng TRUE để reset mệnh đề “write” trong query.
Ví dụ như sau:
$this->db->delete("Hoc_Sinh", "MaHocSinh = 1");
Lấy dữ liệu – Select
Để lấy dữ liệu trong cơ sở dữ liệu, hàm get() được sử dụng. Hàm get() có cú pháp như sau:
get([$table = ''[, $limit = NULL[, $offset = NULL]]])
Trong đó:
- $table (string) là tên bảng
- $limit (int) là mệnh đề LIMIT
- $offset (int) là mệnh đề OFFSET
Để lấy dữ liệu ra chúng ta thực hiện 2 bước, đầu tiên là thực hiện lệnh get() để lấy các dữ liệu ra và lưu thành đối tượng $query. Sau đó gọi hàm result() để lấy tất cả các dữ liệu trong đối tượng $query và lưu vào mảng.
$query = $this->db->get("Hoc_Sinh"); $data['records'] = $query->result();
Các bạn có thể xem thêm phần reference của CI tại đây