06/04/2021, 14:46

[Module User] - Thư viện xử lý database - PHP MVC căn bản

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 ...

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:

 

// 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.

Tạ Quốc Bảo

23 chủ đề

7270 bài viết

0