Blog

Ở bài trước Công ty thiết kế website OTVINA đã cùng các bạn tìm hiểu về Model trong Codeigniter, đó là 1 trong những bước đầu tiên để bắt đầu xử lý dữ liệu của CI, hôm nay chúng ta cùng nhau tìm hiểu về Database và các thao tác với Database trong CodeIgniter.

Trước khi bắt đầu, chúng ta phải cấu hình cho database như đã tìm hiểu ở bài Hướng dẫn cài đặt CodeIgniter.

Gọi thư viện

Trong Codeigniter để xử dụng 1 số chức năng có sẵn của Codeigniter bạn phải gọi thư viện của nó, khi thao tác với Database chúng ta sẽ phải gọi thư viện Database, nếu các bạn không gọi thư viện sẽ không hoạt động được các phương thức thao tác với database.

Để gọi chúng ta sử dụng cú pháp sau:

$this->load->library('database');

Đôi khi bạn sử dụng thường xuyên với database thì bạn có thể sử dụng Autoload tương tự như trong bài viết Model trong Codeigniter, bạn vào application/config/autoload.php tìm dòng

$autoload['libraries'] = array('');

thay thế thành

$autoload['libraries'] = array('database');

Như vậy mỗi khi chạy website thư viện database sẽ tự động được gọi.

Ví dụ:

class User extends CI_Controller{
    public function __construct(){
        parent::__construct();
        $this->load->library("database");
    }
    public function index(){
    }
}

 Chuẩn bị database trước khi bắt đầu

Trong bài viết này chúng ta có các thao tác trên Database, vì vậy để bắt đầu các bạn hãy tạo trước 1 database với bảng quản lý thành viên, chạy khối lệnh bên dưới trong phpmyadmin hoặc thao tác tay để tạo bảng user:

CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL,
  `password` char(32) COLLATE utf8_unicode_ci DEFAULT NULL
  PRIMARY KEY (`id`)
)

Sau khi đã có rồi bạn hãy thao tác thêm 1 vài thành viên ngay trên phpmyadmin.

Thao tác database

1. Insert

Để insert dữ liệu vào database chúng ta sử dụng function insert(); với cú pháp:

insert($table,$data);

Trong đó:

  • $table: Tên bảng muốn insert dữ liệu vào.
  • $data: 1 mảng dữ liệu bao gồm các trường dữ liệu và giá trị sẽ insert vào database

Ví dụ: Thêm 1 thành viên vào database

class User extends CI_Controller{
    public function __construct(){
        parent::__construct();
        $this->load->library("database");
    }
    public function index(){
        $data=array(
           'username'=>'vucongtinh',
           'password'=>'123456'
        );
        $this->db->insert('users',$data);
    }
}

Vậy sau khi gọi đến controller này thì dữ liệu thành viên có username ‘vucongtinh‘ và password ‘123456‘ sẽ được insert vào database.

2. Update

Để cập nhật 1 bản ghi trong Codeigniter chúng ta sẽ phải sửa dụng functipn update() đi kèm đó là set() và where(), cú pháp:

$data = array( 
   'tencot1' => ‘giatri1’, 
   'tencot2' => ‘giatri2’, 
   'tencot3' => ‘giatri3’, 
); 
$this->db->set($data); //Set giá trị sẽ được update 
$this->db->where("id", ‘1’); // Điều kiện khi update dữ liệu bản ghi
$this->db->update("stud", $data); //Update giá trị

 3. Xóa dữ liệu

Để xóa 1 bản ghi trong database trên Codeigniter bạn sử dụng cấu trúc sau

$this->db->delete("tenbang", "dieukien= giatri");

Ví dụ: Xóa thành viên có id=1

$this->db->delete("users", "id= 1");

 3. Lấy dữ liệu( Select)

Để lấy dữ liệu trong Codeigniter bạn cần sửa dụng function get();

$this->db->get("tenbang",$limit,$offset); //$limit là số bản ghi lấy ra từ vị trí $offset

 3. Chạy 1 câu lệnh SQL tùy chỉnh

Để chạy 1 câu lệnh tùy chỉnh theo ý mình trong Codeigniter các bạn sử dụng như sau

$this->db->query($sql);

Ví dụ:

$sql="SELECT * FROM users'";
$query= $this->db->query($sql);
$data= $query->result_array();//Lấy giá trị trả về

Ở đây bạn sẽ thấy tôi sử dụng result_array() ý nghĩa của nó là sẽ lấy tất cả các giá trị trả về theo 1 mảng, kiểu tương tự như các bạn sửa dụng mysql_fetch_array hay mysql_fetch_assoc vậy.

Đối với đoạn lệnh trên để ngắn gọn bạn hoàn toàn có thể sử dụng

$query= $this->db->get("users");
$data= $query->result_array();

để thay thế, nó sẽ giúp code của bạn ngắn gọn hơn.

Một số function hỗ trợ khác:

  • Đếm số dòng trả về: $query->num_row();
  • Lấy 1 số cột nhất định: $this->db->select(); . Ví dụ chỉ lấy id và username thành viên: $this->db->select(‘id,username’);
  • Sắp xếp giá trị trả về: $this->db->order_by(‘tentruong’,’asc hoặc desc’);
  • Giới hạn kết quả trả về $this->db->limiit($limit,$offset); trong đó $limit là số kết quả tối đa trả về từ vị trí $offset
  • Đặt điều kiện cho kết quả trả về: $this->db->where();

Ví dụ:

$this->db->select('id,username');//Chỉ lấy 2 cột id và username
$this->db->where('id',1); //Chỉ lấy điều kiện id=1
$this->db->where('location','Việt Nam'); //Chỉ lấy những ai có location là Việt Nam
$this->db->limit(10,0); //Giới hạn bản ghi
$this->db->order_by('id','desc'); //Sắp xếp theo ID giảm dần
$query= $this->db->get("users");
$data= $query->result_array();

Thao tác Database trong controller và model như thế nào

Có 2 cách để bạn có thể thực hiện tuy nhiên bạn dùng cách 2: Đưa vào model để xử lý thì sẽ đúng hơn với mô hình MVC, vì controller chỉ có chức năng xử lý dữ liệu, nên đặt vào thì có vẻ nó k phù hợp với mô hình MVC cho lắm

Cách 1: Đặt ngay trong Controller

Bạn hoàn toàn có thể thao tác trực tiếp với database ngay trong controller, như sau:

<?php
if(!defined('BASEPATH')) exit('No access');
class Users extens CI_Controller{
public function index(){
$this->db->select('id,username,email');
$this->db->order_by('id','asc');
$query = $this->db->get('users');
$data['users'] = $query->result_array();
$this->load->view('list_user',$data);
}
}
?>

Trong file list_user.php trong phần Views bạn chỉ cần lặp mảng $users để hiển thị danh sách thành viên ra views

<?php
foreach($users as $user){
echo "Username: ".$user['username']."<br>";
echo "Email: ".$user['email']."<br>";
}
?>

 Cách 2: Đưa vào model

Thông thường bạn dùng cách trên cũng không phải là sai,tuy nhiên nó làm mất đi ý nghĩa của model làm chúng ta khó quản lý được code của mình, vì vậy sau này khi thiết kế web các bạn nên tách riêng những câu lệnh thao tác với database qua Model

  • Controllers: users.php
<?php
if(!defined('BASEPATH')) exit('No access');
class Users extens CI_Controller{
public function index(){
$this->load->model('users_model'); //Gọi model
$data['users'] = $this->users_model->list_users(); //Gọi functuon list_users();
$this->load->view('list_user',$data);
}
}
?>
  • Models: users_model.php
<?php
class Users_model extens CI_Model{
public function list_users(){
$this->db->select('id,username,email');
$this->db->order_by('id','asc');
$query = $this->db->get('users');
return $query->result_array();
}
}
?>
  • Views: Trong view chúng ta vẫn sử dụng in ra như cách 1
<?php
foreach($users as $user){
echo "Username: ".$user['username']."<br>";
echo "Email: ".$user['email']."<br>";
}
?>

Như vậy là chúng ta đã có 1 website được thiết kế sử dụng đúng mô hình MVC với chức năng lấy thông tin thành viên, các bạn hoàn toàn có thể sử dụng các thao tác: sửa,xóa, thêm tương tự như ví dụ trên.

Về cơ bản đó là những kiến thức liên quan đến database trong Codeigniter, các bạn chỉ việc gọi thư viện và áp dụng những cú pháp bên trên. Hy vọng bài viết này của Công ty thiết kế website OTVINA sẽ hữu ích đối với các bạn!