[Module User] - Thư viện xử lý database
Chúng ta đang lập trình hướng thủ tục nên phải tận dụng hàm để tối ưu hóa và rút ngắn những đoạn code lại. Để làm được như vậy thì ta phải tạo ra những thư viện dùng chung cho toàn bộ các module, mỗi thư viện có tính chất giống nhau ta sẽ đặt trong một file và nằm trong thư mục libs.

Trong bài này ta sẽ viết những hàm dùng để xử lý database trước, những hàm này sẽ thực hiện các thao tác như kết nối CSDL, ngắt kết nối CSDL, lấy danh sách, lấy chi tiết, thêm xóa sửa. Đây là những thao tác thường xuyên được sử dụng nên ta sẽ tạo một thư viện tên database.php để các module sử dụng chung.
1. Thư viện xử lý database PHP
Vì các bạn đang học căn bản nên mình sẽ sử dụng MySQLi Procedural. Nếu bạn chưa rành về cách sử dụng MySQLi thì hãy tham khảo series PHP và MySQL.
Đầu tiên bạn mở file libs/database.php lên, sau đó copy và pass đoạn code dưới đây:
Bài viết này được đăng tại [free tuts .net]
// Biến lưu trữ kết nối
$conn = null;
// Hàm kết nối
function db_connect(){
    global $conn;
    if (!$conn){
        $conn = mysqli_connect('localhost', 'root', 'vertrigo', 'php_example') 
                or die ('Không thể kết nối CSDL');
        mysqli_set_charset($conn, 'UTF-8');
    }
}
// Hàm ngắt kết nối
function db_close(){
    global $conn;
    if ($conn){
        mysqli_close($conn);
    }
}
// Hàm lấy danh sách, kết quả trả về danh sách các record trong một mảng
function db_get_list($sql){
    db_connect();
    global $conn;
    $data  = array();
    $result = mysqli_query($conn, $sql);
    while ($row = mysqli_fetch_assoc($result)){
        $data[] = $row;
    }
    return $data;
}
// Hàm lấy chi tiết, dùng select theo ID vì nó trả về 1 record
function db_get_row($sql){
    db_connect();
    global $conn;
    $result = mysqli_query($conn, $sql);
    $row = array();
    if (mysqli_num_rows($result) > 0){
        $row = mysqli_fetch_assoc($result);
    }    
    return $row;
}
// Hàm thực thi câu truy  vấn insert, update, delete
function db_execute($sql){
    db_connect();
    global $conn;
    return mysqli_query($conn, $sql);
}
Mình sẽ giải thích qua về những hàm trên.
Biến kết nối:
$conn = null;
Chúng ta đang sử dụng hàm nên để tối ưu ta phải khai báo một biến kết nối toàn cục, sau đó các câu truy vấn sẽ dùng chung biến kết nối này.
Hàm kết nối:
function db_connect(){
    global $conn;
    if (!$conn){
        $conn = mysqli_connect('localhost', 'root', 'vertrigo', 'php_example') 
                or die ('Không thể kết nối CSDL');
        mysqli_set_charset($conn, 'UTF-8');
    }
}
Trong hàm kết nối để sử dụng được biến $conn thì ta sẽ dùng từ khóa global đặt trước nó. Để tránh trường hợp hàm này bị gọi nhiều lần sẽ dẫn đến kết nối nhiều lần thì ta sẽ kiểm tra nó đã được kết nối chưa rồi mới tiến hành kết nối.
Hàm ngắt kết nối:
function db_close(){
    global $conn;
    if ($conn){
        mysqli_close($conn);
    }
}
Trước khi ngắt kết nối ta phải kiểm tra nó đã kết nối chưa, nếu chưa thì không cần thực hiện thao tác này.
Hàm lấy danh sách:
function db_get_list($sql){
    db_connect();
    global $conn;
    $data  = array();
    $result = mysqli_query($conn, $sql);
    while ($row = mysqli_fetch_assoc($result)){
        $data[] = $row;
    }
    return $data;
}
Hàm này dùng cho câu truy vấn SELECT dùng để lấy danh sách records. Kết quả nó trả về dạng mảng kết hợp các records.
Hàm lấy chi tiết:
function db_get_row($sql){
    db_connect();
    global $conn;
    $result = mysqli_query($conn, $sql);
    $row = array();
    if (mysqli_num_rows($result) > 0){
        $row = mysqli_fetch_assoc($result);
    }    
    return $row;
}
Hàm này dùng cho câu lệnh SELECT lấy chi tiết mộ record nào đó, thường thì chúng ta lấy theo ID. Nếu kết quả trả về nhiều hơn 1 record thì nó sẽ trả về record đầu tiên.
Hàm truy vấn insert, update, delete:
function db_execute($sql){
    db_connect();
    global $conn;
    return mysqli_query($conn, $sql);
}
Hàm này để thực thi các câu truy vấn như insert, update, delete vì những câu truy vấn này có kết quả trả về là TRUE hoặc FALSE chứ không phải là lấy danh sách như hai hàm trên.
2. Lời kết
Như vậy tổng cộng chúng ta có 5 hàm thường dùng để xử lý database, những hàm này sẽ được dùng cho toàn bộ các module. Các bạn hãy đọc kỹ từng hàm để hiểu ý tưởng của thư viện này để sau này biết cách sử dụng nhé. Bài tiếp theo chúng ta sẽ thảo luận về thư viện Session.

 Xây dựng chức năng đăng nhập và đăng ký với php và mysql
            Xây dựng chức năng đăng nhập và đăng ký với php và mysql         Bảng mã ASCII chuẩn các hệ nhị phân - thập phân - thập lục phân
            Bảng mã ASCII chuẩn các hệ nhị phân - thập phân - thập lục phân         Cách khai báo biến trong PHP, các loại biến thường gặp
            Cách khai báo biến trong PHP, các loại biến thường gặp         Bài 26: Hàm isset() và empty() trong php
            Bài 26: Hàm isset() và empty() trong php         Các kiểu dữ liệu trong PHP và các loại biến tương ứng
            Các kiểu dữ liệu trong PHP và các loại biến tương ứng         Bài 19: Phương thức GET và POST trong php
            Bài 19: Phương thức GET và POST trong php         Download và cài đặt Vertrigo Server
            Download và cài đặt Vertrigo Server         Bài 20: Các hàm xử lý chuỗi trong php
            Bài 20: Các hàm xử lý chuỗi trong php         Thẻ li trong HTML
                Thẻ li trong HTML             Thẻ article trong HTML5
                Thẻ article trong HTML5             Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
                Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên             Cách dùng thẻ img trong HTML và các thuộc tính của img
                Cách dùng thẻ img trong HTML và các thuộc tính của img             Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng
                Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng             
                