Ví dụ về Class xử lý dữ liệu MySQL với lập trình hướng đối tượng PHP (Phần 1) là vấn đề được nhiều lập trình viên quan tâm, bởi những kiến thức trên trường lớp là không đủ, vì vậy bài Ví dụ về Class xử lý dữ liệu MySQL với lập trình hướng đối tượng PHP (Phần 1) sẽ chia sẻ tới bạn nhiều thông tin hữu ích
Mọi người vẫn hỏi tôi về việc học lập trình nói chung và PHP nói riêng có cần năng khiếu hay quá khó để tiếp cận hay không. Thì tôi có thể trả lời rằng, học lập trình cũng như việc bạn học tiếng Anh hay bất kỳ một ngôn ngữ khác, bởi lập trình...là ngôn ngữ của máy tính, để máy tính đọc và máy tính thực hiện theo yêu cầu của mình, bạn thích là học được.
Trong bài này chúng ta sẽ vận dụng những kiên thức từ đầu series tới giờ để thực hiện viết một lớp xử lý database thường sử dụng trong PHP. Lưu ý với bạn rằng thư viện này mục đích là để các bạn hiểu được lập trình OOP chứ mình không ép các bạn lấy nó sử dụng trong project nhé .
Nội dung trong bài sẽ vận dụng thêm các kiến thức như các hàm xử lý mảng trong php, các hàm xử lý kết nối CSDL trong php như mysqli_connect, mysqli_close, mysqli_query ... Nên nếu bạn chưa biết nó là gì thì hãy tìm hiểu trước nhé.
Vì mục đích của tôi sẽ trình bày các tính chất trong lập trình hướng đối tượng như tính kế thừa, tính trừu tượng ... nên trong bài này chúng ta sẽ xây dựng một mô hình các lớp như sau:
Trong đó file DB_driver đóng vai trò là adapter, nó sẽ chứa các hàm basic xử lý kết nối, xử lý câu truy vấn sql như insert, update, delete. File DB_business sẽ kế thừa file DB_driver và ngoài các hàm kế thừa có thể sử dụng thì nó sẽ có thêm các hàm bổ trợ như hàm select theo id, delete theo id, update theo id. Còn file demo sẽ chứa những đoạn code hướng dẫn cách sử dụng.
Trong file này chúng ta sẽ xây dựng một số hàm như sau:
// Thư Viện Xử Lý Database class DB_driver { // Biến lưu trữ kết nối private $__conn; // Hàm Kết Nối function connect(){ // do some thing } // Hàm Ngắt Kết Nối function dis_connect(){ // do some thing } // Hàm Insert function insert($table, $data){ // do some thing } // Hàm Update function update($table, $data, $where){ // do some thing } // Hàm delete function remove($table, $where){ // do some thing } // Hàm lấy danh sách function get_list($table, $select, $where){ // do some thing } // Hàm lấy 1 record dùng trong trường hợp lấy chi tiết tin function get_row($table, $select, $where){ // do some thing } }
Ý nghĩa của từng hàm mình đã comment rõ ràng rồi, bây giờ chúng ta sẽ xây dựng cho từng hàm nhé.
// Hàm Kết Nối function connect() { // Nếu chưa kết nối thì thực hiện kết nối if (!$this->__conn){ // Kết nối $this->__conn = mysqli_connect('localhost', 'root', 'vertrigo', 'demo') or die ('Lỗi kết nối'); // Xử lý truy vấn UTF8 để tránh lỗi font mysqli_query($this->__conn, "SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'"); } }
// Hàm Ngắt Kết Nối function dis_connect(){ // Nếu đang kết nối thì ngắt if ($this->__conn){ mysqli_close($this->__conn); } }
// Hàm Insert function insert($table, $data) { // Kết nối $this->connect(); // Lưu trữ danh sách field $field_list = ''; // Lưu trữ danh sách giá trị tương ứng với field $value_list = ''; // Lặp qua data foreach ($data as $key => $value){ $field_list .= ",$key"; $value_list .= ",'".mysql_escape_string($value)."'"; } // Vì sau vòng lặp các biến $field_list và $value_list sẽ thừa một dấu , nên ta sẽ dùng hàm trim để xóa đi $sql = 'INSERT INTO '.$table. '('.trim($field_list, ',').') VALUES ('.trim($value_list, ',').')'; return mysqli_query($this->__conn, $sql); }
// Hàm Update function update($table, $data, $where) { // Kết nối $this->connect(); $sql = ''; // Lặp qua data foreach ($data as $key => $value){ $sql .= "$key = '".mysql_escape_string($value)."',"; } // Vì sau vòng lặp biến $sql sẽ thừa một dấu , nên ta sẽ dùng hàm trim để xóa đi $sql = 'UPDATE '.$table. ' SET '.trim($sql, ',').' WHERE '.$where; return mysqli_query($this->__conn, $sql); }
// Hàm delete function remove($table, $where){ // Kết nối $this->connect(); // Delete $sql = "DELETE FROM $table WHERE $where"; return mysqli_query($this->__conn, $sql); }
// Hàm lấy danh sách function get_list($sql) { // Kết nối $this->connect(); $result = mysqli_query($this->__conn, $sql); if (!$result){ die ('Câu truy vấn bị sai'); } $return = array(); // Lặp qua kết quả để đưa vào mảng while ($row = mysqli_fetch_assoc($result)){ $return[] = $row; } // Xóa kết quả khỏi bộ nhớ mysqli_free_result($result); return $return; }
// Hàm lấy 1 record dùng trong trường hợp lấy chi tiết tin function get_row($sql) { // Kết nối $this->connect(); $result = mysqli_query($this->__conn, $sql); if (!$result){ die ('Câu truy vấn bị sai'); } $row = mysqli_fetch_assoc($result); // Xóa kết quả khỏi bộ nhớ mysqli_free_result($result); if ($row){ return $row; } return false; }
Trong mỗi hàm hy vọng các bạn hiểu được ý nghĩa của từng đoạn code :D. Sau đây là nội dung toàn file DB_driver:
// Thư Viện Xử Lý Database class DB_driver { // Biến lưu trữ kết nối private $__conn; // Hàm Kết Nối function connect() { // Nếu chưa kết nối thì thực hiện kết nối if (!$this->__conn){ // Kết nối $this->__conn = mysqli_connect('localhost', 'root', 'vertrigo', 'demo') or die ('Lỗi kết nối'); // Xử lý truy vấn UTF8 để tránh lỗi font mysqli_query($this->__conn, "SET character_set_results = 'utf8', character_set_client = 'utf8', character_set_database = 'utf8', character_set_server = 'utf8'"); } } // Hàm Ngắt Kết Nối function dis_connect(){ // Nếu đang kết nối thì ngắt if ($this->__conn){ mysqli_close($this->__conn); } } // Hàm Insert function insert($table, $data) { // Kết nối $this->connect(); // Lưu trữ danh sách field $field_list = ''; // Lưu trữ danh sách giá trị tương ứng với field $value_list = ''; // Lặp qua data foreach ($data as $key => $value){ $field_list .= ",$key"; $value_list .= ",'".mysql_escape_string($value)."'"; } // Vì sau vòng lặp các biến $field_list và $value_list sẽ thừa một dấu , nên ta sẽ dùng hàm trim để xóa đi $sql = 'INSERT INTO '.$table. '('.trim($field_list, ',').') VALUES ('.trim($value_list, ',').')'; return mysqli_query($this->__conn, $sql); } // Hàm Update function update($table, $data, $where) { // Kết nối $this->connect(); $sql = ''; // Lặp qua data foreach ($data as $key => $value){ $sql .= "$key = '".mysql_escape_string($value)."',"; } // Vì sau vòng lặp biến $sql sẽ thừa một dấu , nên ta sẽ dùng hàm trim để xóa đi $sql = 'UPDATE '.$table. ' SET '.trim($sql, ',').' WHERE '.$where; return mysqli_query($this->__conn, $sql); } // Hàm delete function remove($table, $where){ // Kết nối $this->connect(); // Delete $sql = "DELETE FROM $table WHERE $where"; return mysqli_query($this->__conn, $sql); } // Hàm lấy danh sách function get_list($sql) { // Kết nối $this->connect(); $result = mysqli_query($this->__conn, $sql); if (!$result){ die ('Câu truy vấn bị sai'); } $return = array(); // Lặp qua kết quả để đưa vào mảng while ($row = mysqli_fetch_assoc($result)){ $return[] = $row; } // Xóa kết quả khỏi bộ nhớ mysqli_free_result($result); return $return; } // Hàm lấy 1 record dùng trong trường hợp lấy chi tiết tin function get_row($sql) { // Kết nối $this->connect(); $result = mysqli_query($this->__conn, $sql); if (!$result){ die ('Câu truy vấn bị sai'); } $row = mysqli_fetch_assoc($result); // Xóa kết quả khỏi bộ nhớ mysqli_free_result($result); if ($row){ return $row; } return false; } }
Trước tiên bạn tạo một database tên demo và tạo một table như sau:
CREATE TABLE IF NOT EXISTS `customer` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL, `phone` varchar(200) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;
Note: Vì bài tương đối dài nên tôi sẽ trình bày tiêp ở bài tiếp theo nhé
Vậy là hết :D
Trong bài này các bạn chỉ cần hiểu được ý nghĩa của đối tượng trong PHP, hiểu được một số hàm xử lý database trong PHP thì sẽ hiểu được những đoạn code mà mình đã trình bày. Trong thực tế đó chỉ là những đoạn code đơn giản, còn những đoạn code phức tạp hơn nhiều, thậm chí dài đến mấy ngàn dòng. Chúc các ban học tốt nhé.
Hy vọng với bài viết về Ví dụ về Class xử lý dữ liệu MySQL với lập trình hướng đối tượng PHP (Phần 1) đã giải đáp giúp bạn phần nào về kiến thức lập trình PHP. Như tôi đã nói, ngôn ngữ lập trình không quan trọng bằng tư duy giải thuật, tư duy logic để giải quyết vấn đề.
Với những năm trước đây, lập trình viên là một cái nghề khó và kén chọn người học, đồng nghĩa với việc thu nhập hàng tháng của các lập trình viên luôn cao. Còn những năm gần đây, thì lập trình là môn học phổ thông, và ai cũng nên học một ngôn ngữ lập trình nào đó.
Nếu bạn còn bất kỳ câu hỏi nào trong việc học lập trình online, hãy gửi yêu cầu cho tôi qua email hoidapcode.com@gmail.com hoặc để lại comment bên dưới, tôi sẽ giải đáp trong vòng 24 giờ!
Blog hoidapcode.com là blog được tổng hợp tự động các bài học, thông tin về lập trình trên mạng internet. Nếu bạn có ý kiến hoặc đóng góp về bài viết này, hãy liên hệ với tôi!