Xử lý truy vấn dữ liệu trên CodeIgniter project

Xử lý truy vấn dữ liệu từ Database là việc không thể thiếu khi phát triển hệ thống. Codeigniter đưa ra cho chúng ta các phương thức rất hữu ích để truy vấn dữ liệu từ DataBase. Việc sử dụng truy vấn hợp lý sẽ giúp giảm bớt đáng kể công việc xử lý dữ liệu sau này. 

1. Các phương thức truy vấn trên CodeIgniter bao gồm:

a. Hàm $this->db->query().

Hàm này sẽ submit một câu truy vấn. Ví dụ:

$query = $this->db->query('YOUR QUERY HERE');

Hàm query() này trả về dữ liệu là một object nếu truy vấn sử dụng là dạng truy vấn đọc "SELECT", còn sẽ trả về TRUE/FALSE nếu truy vấn là dạng truy vấn ghi "INSERT/UPDATE".

b. Hàm $this->db->simple_query().

Hàm này là dạng đơn giản hóa của hàm $this->db->query() . Nó chỉ trả về TRUE/FALSE chứ không trả về tập dữ liệu nào đó, không lưu trữ truy vấn, và cũng không thiết lập được bộ đếm truy vấn. Hàm này đơn giản chỉ là submit một truy vấn.

Thực tế ta ít khi dùng hàm này.

2. Làm việc với việc tùy chỉnh tiền tố cho DB.

Nếu các bạn muốn sử dụng tiền tố cho tên của một bảng để sử dụng trong truy vấn SQL thuần, thì các bạn có thể sử dụng hàm sau:

$this->db->dbprefix('tablename');
// trả về là prefix_tablename

Vì một lý do nào đó bạn muốn thay đổi tiền tố theo chương trình sẵn mà không phải tạo một kết nối mới, bạn có thể dùng hàm sau:

$this->db->set_dbprefix('newprefix');
$this->db->dbprefix('tablename');
// trả về là newprefix_tablename

3. Bảo vệ danh tính.

Trong nhiều Cơ sở dữ liệu được khuyên rằng cần bảo vệ bảng và các trường tên, ví dụ việc sử dụng dấu ngoặc `` trên MySQL. Tuy các truy vấn bản ghi được tự động bảo vệ, nhưng nếu bạn muốn tự tùy chỉnh bảo vệ mộ định danh bất kỳ thì bạn có thể sử dụng hàm:

$this->db->protect_identifiers('table_name');

Hàm này cũng chèn một tiền tố bảng vào bảng bạn sử dụng, giả sử bạn có thiết lập một tiền tố cho Database của bạn trong file config.php, bạn có thể kích hoạt chúng bằng cách thiết lập giá trị TRUE với tham số thứ hai của hàm :

$this->db->protect_identifiers('table_name', TRUE);

4. Các truy vấn Xóa dấu.

Trên thực tế việc bảo mất dữ liệu sẽ rất hiệu quả nếu dữ liệu của bạn trước khi được truyền vào Database được xóa dấu (tức là loại bỏ các ký tự đặc biệt ra khỏi dữ liệu). CodeIgniter có 3 phương thức để giúp các bạn thực hiện công việc này:

a. Hàm $this->db->escape().

Hàm này xác định kiểu dữ liệu để nó có thể loại bỏ chỉ với dữ liệu kiểu chuỗi. Nó cũng tự động chèn các dấu ngoặc đơn quanh dữ liệu , nên bạn không cần phải thực hiện việc này thủ công nữa:

$sql = "INSERT INTO table (title) VALUES(".$this->db->escape($title).")";

b. Hàm $this->db->escape_str()

Hàm này giúp loại bỏ ký tự đặc biệt trong dữ liệu truyền vào, bất kể kiểu dữ liệu là gì. Trên thực tế bạn sẽ thường sử dụng hàm escapse() ở trên hơn là hàm này :

$sql = "INSERT INTO table (title) VALUES('".$this->db->escape_str($title)."')";

c. Hàm $this->db->escape_like_str().

Hàm này nên được sử dụng khi các chuỗi được sử dụng trong câu truy vấn LIKE, Ví dụ :

$search = '20% raise';
$sql = "SELECT id FROM table WHERE column LIKE '%".$this->db->escape_like_str($search)."%'";  

5. Các truy vấn gắn kết.

Các gắn kết giúp bạn đơn giản cú pháp của câu truy vấn. Ví dụ:

$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; 
$this->db->query($sql, array(3, 'live', 'Rick'));

Các dấu ? trong biểu thức truy vấn được tự động thay thế bằng các giá trị trong mảng (tham số thứ hai) của hàm query(). Việc sử dụng các gắn kết này cũng sẽ giúp bạn tự động loại bỏ được ký tự đặc biệt trong dữ liệu truyền vào, làm tạo ra các truy vấn an toàn hơn.

Trên đây mình đã trình bày về các hàm truy vấn - query() được CodeIgniter hỗ trợ. Trong bài tới mình sẽ trình bày về các phương thức để lấy dữ liệu từ Database.

Chúc các bạn thành công :)