Tuần tự hóa dữ liệu trong PHP

Mặc dù có thể bạn đã tìm kiếm một số hàm được tích hợp sẵn để thực hiện tuần tự hóa trong PHP. Nhưng có cách tốt hơn để làm điều này

Thông thường chúng ta cần lưu trữ một mảng phức tạp trong cơ sở dữ liệu hoặc trong một tệp từ PHP (Còn được gọi là tuần tự hóa dữ liệu)

Tuần tự hóa dữ liệu trong PHP
Tuần tự hóa dữ liệu trong PHP

Mặc dù có thể bạn đã tìm kiếm một số hàm được tích hợp sẵn để thực hiện tuần tự hóa trong PHP.

Mảng phức tạp là các mảng có các phần tử của nhiều kiểu dữ liệu hoặc nhiều mảng.

Nhưng, chúng ta có một giải pháp tốt hơn để xử lý tình huống này.

Chúng ta cũng không phải viết hàm riêng để chuyển mảng phức tạp thành chuỗi có định dạng.

Có hai phương thức phổ biến của tuần tự hóa dữ liệu, đó là:

  • serialize()
  • unserialize()

Ví dụ về tuần tự hóa dữ liệu trong PHP với serialize() / unserialize().

Chúng ta có thể tuần tự hóa bất kỳ dữ liệu nào trong PHP bằng cách sử dụng hàm serialize().

Hàm serialize() chấp nhận một tham số duy nhất là dữ liệu chúng ta muốn tuần tự hóa và trả về một chuỗi tuần tự hóa.

Hãy xem ví dụ bên dưới đây:

<?php 
  
// Một mảng phức tạp
$myvar = array( 
    'Xin chào', 
    123, 
    array(1, 'laptrinhvienphp.com'), 
    'học php'
); 
  
// Tuần tự hóa dữ liệu trên 
$string = serialize($myvar); 
  
// Hủy tuần tự hóa dữ liệu $string 
$newvar = unserialize($string);   
   
// In ra dữ liệu chưa tuần tự hóa 
print_r($newvar); 
  
?> 

Kết quả chúng ta có:

Array
(
    [0] => Xin chào
    [1] => 123
    [2] => Array
        (
            [0] => 1
            [1] => laptrinhvienphp.com
        )

    [3] => học php
)

Đây là phương thức tuần tự hóa PHP gốc. Tuy nhiên, vì kiểu dữ liệu JSON đã trở nên rất phổ biến và nhà PHP Core Teams đã quyết định thêm hỗ trợ cho nó trong từ phiên bản PHP 5.2.

Bây giờ bạn có thể sử dụng các hàm json_encode()json_decode() để tuần tự hóa và hủy tuần tự hóa dữ liệu trong PHP.

Ví dụ về tuần tự hóa dữ liệu trong PHP với json_encode() / json_decode().

Vì định dạng JSON chỉ là dạng văn bản, nó có thể dễ dàng được gửi đến / đi từ một máy chủ và có thể được sử dụng làm định dạng dữ liệu bởi bất kỳ ngôn ngữ lập trình nào.

Hãy xem cách sử dụng json_encode() trong PHP qua ví dụ dưới đây:

<?php 
  
// Một mảng phức tạp
$myvar = array( 
    'Xin chào', 
    123, 
    array(1, 'laptrinhvienphp.com'), 
    'học php'
); 
  
// Tuần tự hóa dữ liệu với JSON
$string = json_encode($myvar); 
  
// In dữ liệu đã được tuần tự hóa
echo $string; 
  
?>

Kết quả khi chạy chương trình là:

["Xin chào",123,[1,"laptrinhvienphp.com"],"học php"]

Chúng ta có thể giải mã dữ liệu được mã hóa trong chương trình trên bằng cách sử dụng hàm json_decode() để lấy mảng phức tạp ban đầu.

Cách giải mã như sau:

<?php

// Một mảng phức tạp
$myvar = array( 
    'Xin chào', 
    123, 
    array(1, 'laptrinhvienphp.com'), 
    'học php'
);

// Tuần tự hóa dữ liệu
$string = json_encode($myvar); 
  
// Giải mã chuỗi được mã hóa ở trên
$newvar = json_decode($string); 
   
// In dữ liệu đã được giải mã  
print_r($newvar); 
  
?> 

Kết quả đầu ra là:

Array
(
    [0] => Xin chào
    [1] => 123
    [2] => Array
        (
            [0] => 1
            [1] => laptrinhvienphp.com
        )

    [3] => học php
)

Lưu ý: Mã hóa / Giải mã JSON nhỏ gọn hơn và tốt nhất là tương thích với Javascript và nhiều ngôn ngữ khác. Tuy nhiên, đối với các đối tượng phức tạp, một số thông tin có thể bị mất.

Bạn đã hiểu cách tuần tự hóa dữ liệu chưa?

Đây là chỉ một cách đơn giản nhất giúp bạn hiểu các chúng ta tuần tự hóa dữ liệu trong PHP.

Thực tế sử dụng sẽ cần tình huống cụ thể và yêu cầu cụ thể để có được kết quả như mong muốn.

Chúc bạn học lập trình PHP tốt hơn.

>> Tham khảo: Khóa học PHP (Toàn diện: Sáng diện, trưa diện, tối diện)

PHPDEV

PHP và AJAX (Ai rắc) | MySQL & PHP

Trong bài hướng dẫn tự học PHP này, bạn sẽ tìm hiểu cách tạo một tính năng tìm kiếm trực tiếp (live search) trong cơ sở dữ liệu MySQL bằng PHP và Ajax.

Trong bài hướng dẫn tự học PHP này, bạn sẽ tìm hiểu cách tạo một tính năng tìm kiếm trực tiếp (live search) trong cơ sở dữ liệu MySQL bằng PHP và Ajax.

Ví dụ PHP và AJAX
Vúi dụ về PHP và AJAX

Tìm kiếm trực tiếp trong CSDL là gì?

Bạn có thể tạo một chức năng tìm kiếm trực tiếp trong CSDL đơn giản sử dụng Ajax và PHP.

Trong đó kết quả tìm kiếm sẽ được hiển thị khi bạn bắt đầu nhập một số ký tự trong box tìm kiếm.

Trong hướng dẫn này, chúng ta sẽ tạo một box tìm kiếm trực tiếp sẽ tìm kiếm bảng countries và hiển thị kết quả không đồng bộ.

Nhưng, trước hết chúng ta cần tạo bảng CSDL về các quốc gia đã:

Chức năng tìm kiếm trực tiếp bằng PHP và AJAX

Bước 1: Tạo bảng CSDL

Thực hiện truy vấn SQL sau để tạo bảng countries trong cơ sở dữ liệu MySQL của bạn.

CREATE TABLE countries (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL
);

Sau khi tạo bảng CSDL, bạn cần điền vào đó một số dữ liệu bằng cách sử dụng câu lệnh SQL INSERT.

Ngoài ra, bạn có thể tải xuống bảng countries đã được chuẩn bị trước bằng cách click và import nó vào cơ sở dữ liệu MySQL của bạn.

Vui lòng xem bài viết hướng dẫn về Cách tạo bảng CSDL MySQL để biết chi tiết về cú pháp tạo bảng trong hệ thống cơ sở dữ liệu MySQL.

Bước 2: Tạo Form tìm kiếm

Bây giờ, hãy tạo một giao diện web đơn giản cho phép người dùng tìm kiếm trực tiếp tên của các quốc gia có sẵn trong bảng countries của chúng ta.

Chức năng này giống như tự động hoàn thành.

Tạo một tệp PHP có tên ‘search-form.php‘ và đặt đoạn mã sau vào trong nó:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Chức năng Live Search bằng PHP và AJAX</title>
<style type="text/css">
    body{
        font-family: Arail, sans-serif;
    }
    /* CSS cho search box */
    .search-box{
        width: 300px;
        position: relative;
        display: inline-block;
        font-size: 14px;
    }
    .search-box input[type="text"]{
        height: 32px;
        padding: 5px 10px;
        border: 1px solid #CCCCCC;
        font-size: 14px;
    }
    .result{
        position: absolute;        
        z-index: 999;
        top: 100%;
        left: 0;
    }
    .search-box input[type="text"], .result{
        width: 100%;
        box-sizing: border-box;
    }
    /* CSS cho kết quả */
    .result p{
        margin: 0;
        padding: 7px 10px;
        border: 1px solid #CCCCCC;
        border-top: none;
        cursor: pointer;
    }
    .result p:hover{
        background: #f2f2f2;
    }
</style>
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
    $('.search-box input[type="text"]').on("keyup input", function(){
        /* Lấy giá trị đầu vào khi có thay đổi */
        var inputVal = $(this).val();
        var resultDropdown = $(this).siblings(".result");
        if(inputVal.length){
            $.get("backend-search.php", {term: inputVal}).done(function(data){
                // Hiển thị dữ liệu trả về trong trình duyệt
                resultDropdown.html(data);
            });
        } else{
            resultDropdown.empty();
        }
    });
    
    // Thiết lập giá trị đầu vào khi click vào result
    $(document).on("click", ".result p", function(){
        $(this).parents(".search-box").find('input[type="text"]').val($(this).text());
        $(this).parent(".result").empty();
    });
});
</script>
</head>
<body>
    <div class="search-box">
        <input type="text" autocomplete="off" placeholder="Search country..." />
        <div class="result"></div>
    </div>
</body>
</html>

Mỗi khi nội dung của đầu vào tìm kiếm bị thay đổi hoặc sự kiện keyup xảy ra trên đầu vào tìm kiếm, mã jQuery (dòng no-47 đến 67) đã gửi một yêu cầu Ajax đến tệp ‘backend-search.php‘ để lấy các bản ghi từ bảng countries liên quan đến chuỗi tìm kiếm.

Những bản ghi này sau đó sẽ được jQuery chèn vào một div và hiển thị trên trình duyệt.

Bước 3: Xử lý truy vấn trong Backend

Và đây là mã nguồn của tệp ‘backend-search.php‘ của chúng ta.

Nó sẽ tìm kiếm cơ sở dữ liệu dựa trên chuỗi truy vấn được gửi bởi Ajax và gửi kết quả trở lại trình duyệt.

* Phương pháp hướng thủ tục

<?php
/* Cố gắng kết nối đến MySQL server. Giả sử bạn đang chạy MySQL server mặc đinh (user là 'root' và không có mật khẩu */
$link = mysqli_connect("localhost", "root", "", "demo");
 
// Kiểm tra kết nối
if($link === false){
    die("ERROR: Không thể kết nối. " . mysqli_connect_error());
}
 
if(isset($_REQUEST["term"])){
    // Chuẩn bị câu lệnh SQL SELECT
    $sql = "SELECT * FROM countries WHERE name LIKE ?";
    
    if($stmt = mysqli_prepare($link, $sql)){
        // Liên kết biến đến câu lệnh đã chuẩn bị như là tham số
        mysqli_stmt_bind_param($stmt, "s", $param_term);
        
        // Thiết lập các tham số
        $param_term = $_REQUEST["term"] . '%';
        
        // Cố gắng thực thi câu lệnh đã chuẩn bị
        if(mysqli_stmt_execute($stmt)){
            $result = mysqli_stmt_get_result($stmt);
            
            // Kiểm tra số lượng row trong kết quả
            if(mysqli_num_rows($result) > 0){
                // Tìm nạp các hàng kết quả dưới dạng mảng kết hợp
                while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){
                    echo "<p>" . $row["name"] . "</p>";
                }
            } else{
                echo "<p>Không tìm thấy kết quả nào</p>";
            }
        } else{
            echo "ERROR: Không thể thực thi câu lệnh $sql. " . mysqli_error($link);
        }
    }
     
    // Đóng câu lệnh
    mysqli_stmt_close($stmt);
}
 
// Đóng kết nối
mysqli_close($link);
?>

* Phương pháp hướng đối tượng

<?php
/* Cố gắng kết nối đến MySQL server. Giả sử bạn đang chạy MySQL server mặc đinh (user là 'root' và không có mật khẩu */
$mysqli = new mysqli("localhost", "root", "", "demo");
 
// Kiểm tra kết nối
if($mysqli === false){
    die("ERROR: Không thể kết nối. " . $mysqli->connect_error);
}
 
if(isset($_REQUEST["term"])){
    // Chuẩn bị câu lệnh SQL SELECT
    $sql = "SELECT * FROM countries WHERE name LIKE ?";
    
    if($stmt = $mysqli->prepare($sql)){
        // Liên kết biến đến câu lệnh đã chuẩn bị như là tham số
        $stmt->bind_param("s", $param_term);
        
        // Thiết lập các tham số
        $param_term = $_REQUEST["term"] . '%';
        
        // Cố gắng thực thi câu lệnh đã chuẩn bị
        if($stmt->execute()){
            $result = $stmt->get_result();
            
            // Kiểm tra số lượng row trong kết quả
            if($result->num_rows > 0){
                // Tìm nạp các hàng kết quả dưới dạng mảng kết hợp
                while($row = $result->fetch_array(MYSQLI_ASSOC)){
                    echo "<p>" . $row["name"] . "</p>";
                }
            } else{
                echo "<p>Không tìm thấy kết quả nào</p>";
            }
        } else{
            echo "ERROR: Không thể thực thi câu lệnh $sql. " . mysqli_error($link);
        }
    }
     
    // Đóng câu lệnh
    $stmt->close();
}
 
// Đóng kết nối
$mysqli->close();
?>

* Sử dụng PDO

<?php
/* Cố gắng kết nối đến MySQL server. Giả sử bạn đang chạy MySQL server mặc đinh (user là 'root' và không có mật khẩu */
try{
    $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
    // Thiết lập PDO error mode thành ngoại lệ
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
    die("ERROR: Không thể kết nối. " . $e->getMessage());
}
 
// Cố gắng thực thi truy vấn
try{
    if(isset($_REQUEST["term"])){
        // Chuẩn bị câu lệnh
        $sql = "SELECT * FROM countries WHERE name LIKE :term";
        $stmt = $pdo->prepare($sql);
        $term = $_REQUEST["term"] . '%';
        // Liên kết các tham số đến câu lệnh
        $stmt->bindParam(":term", $term);
        // Thực thi câu lệnh đã chuẩn bị
        $stmt->execute();
        if($stmt->rowCount() > 0){
            while($row = $stmt->fetch()){
                echo "<p>" . $row["name"] . "</p>";
            }
        } else{
            echo "<p>Không tìm thấy kết quả nào</p>";
        }
    }  
} catch(PDOException $e){
    die("ERROR: Không thể thực thi câu lệnh $sql. " . $e->getMessage());
}
 
// Đóng câu lệnh
unset($stmt);
 
// Đóng kết nối
unset($pdo);
?>

Câu lệnh SQL SELECT được sử dụng kết hợp với toán tử LIKE (dòng số 16) để tìm các bản ghi khớp trong bảng cơ sở dữ liệu countries.

Chúng ta đã triển khai câu lệnh đã chuẩn bị (Prepared Statements trong PHP) để có hiệu suất tìm kiếm tốt hơn cũng như để ngăn chặn các cuộc tấn công SQL injection.

Lưu ý: Luôn lọc và xác thực đầu vào của người dùng trước khi sử dụng nó trong câu lệnh SQL. Bạn cũng có thể sử dụng hàm mysqli_real_escape_string() của PHP để loại bỏ các ký tự đặc biệt trong đầu vào của người dùng và tạo một chuỗi SQL hợp lệ để chống lại tấn công SQL injection.

Bạn đã tạo thành công chức năng live search với PHP và AJAX.

Trong bài viết này, mình đã hướng dẫn bạn tạo thành công chức năng live search bằng cách sử dụng PHP và AJAX, nó có 4 bước:

  • Tạo bảng CSDL
  • Tạo form (tạo box search) và chỗ hiển thị kết quả tìm kiếm
  • Xử lý truy vấn với PHP (Hướng thủ tục, hướng đối tượng, PDO

Chức năng này rất hữu ích trong website cũng như cho bạn thấy cách sử dụng PHP và AJAX.

>. Tham gia ngay Khóa học PHP tại Hà Nội để nhanh chóng nhận cơ hội việc làm thu nhập cao.

Chúc bạn học lập trình PHP hiệu quả.

PHP DEV

Tạo Ứng dụng CRUD | MySQL & PHP

Trong bài hướng dẫn tự học MySQL & PHP này, bạn sẽ tìm hiểu cách xây dựng ứng dụng CRUD với PHP và MySQL.

Trong bài hướng dẫn tự học MySQL & PHP này, bạn sẽ tìm hiểu cách xây dựng ứng dụng CRUD với PHP MySQL.

Tạo ứng dụng CRUD trong MySQL và PHP
Tạo ứng dụng CRUD trong MySQL và PHP

CRUD là gì?

CRUD là từ viết tắt của Create, Read, Update và Delete.

Các hoạt động CRUD là các thao tác dữ liệu cơ bản.

Chúng ta đã học cách thực hiện tạo (tức là câu lệnh insert), đọc (tức là câu lệnh select), cập nhật và xóa các hoạt động trong các bài viết trước.

Trong bài này, chúng ta sẽ tạo một ứng dụng PHP đơn giản để thực hiện tất cả các hoạt động này trên bảng cơ sở dữ liệu MySQL.

Bây giờ, hãy bắt đầu bằng cách tạo bảng CSDL mà chúng ta sẽ sử dụng trong tất cả các ví dụ của chúng ta.

1. Tạo bảng CSDL

Thực hiện truy vấn SQL sau để tạo bảng có employee bên trong cơ sở dữ liệu MySQL của bạn.

Chúng ta sẽ sử dụng bảng này cho tất cả các ví dụ bên dưới.

CREATE TABLE employees (
    id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    address VARCHAR(255) NOT NULL,
    salary INT(10) NOT NULL
);

2. Tạo file config

Sau khi tạo bảng, chúng ta cần tạo một tập lệnh PHP để kết nối với máy chủ cơ sở dữ liệu MySQL. Hãy tạo một tệp có tên ‘config.php‘ và đặt đoạn mã sau vào trong nó.

Sau này chúng ta sẽ yêu cầu tệp config.php này trong các trang khác bằng cách sử dụng hàm require() của PHP.

Hướng thủ tục:

<?php
/* Thông tin CSDL. Giả sử bạn đang chạy MySQL Server với thiết lập mặc định (user 'root' và không có mật khẩu) */
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'demo');
 
/* Cố gắng kết nối với cơ sở dữ liệu MySQL */
$link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
 
// Kiểm tra kết nối
if($link === false){
    die("ERROR: Không thể kết nối. " . mysqli_connect_error());
}
?>

Hướng đối tượng:

<?php
/* Thông tin CSDL. Giả sử bạn đang chạy MySQL Server với thiết lập mặc định (user 'root' và không có mật khẩu) */
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'demo');
 
/* Cố gắng kết nối với cơ sở dữ liệu MySQL */
$mysqli = new mysqli(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
 
// Kiểm tra kết nối
if($mysqli === false){
    die("ERROR: Không thể kết nối. " . $mysqli->connect_error);
}
?>

PDO:

<?php
/* Thông tin CSDL. Giả sử bạn đang chạy MySQL Server với thiết lập mặc định (user 'root' và không có mật khẩu) */
define('DB_SERVER', 'localhost');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', '');
define('DB_NAME', 'demo');
 
/* Cố gắng kết nối với cơ sở dữ liệu MySQL */
try{
    $pdo = new PDO("mysql:host=" . DB_SERVER . ";dbname=" . DB_NAME, DB_USERNAME, DB_PASSWORD);
    // Thiết lập chế độ PDO Error thành Ngoại lệ
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
    die("ERROR: Không thể kết nối. " . $e->getMessage());
}
?>

Lưu ý: Thay thế thông tin đăng nhập theo cài đặt máy chủ MySQL của bạn trước khi kiểm tra mã này, ví dụ: thay thế tên cơ sở dữ liệu ‘demo‘ bằng tên cơ sở dữ liệu của riêng bạn, thay thế tên người dùng ‘root’ bằng tên người dùng cơ sở dữ liệu của bạn, chỉ định mật khẩu cơ sở dữ liệu nếu có.

3. Tạo một trang Landing Page

Trước tiên, chúng ta sẽ tạo một trang đích cho ứng dụng CRUD của chúng ta có bảng dữ liệu hiển thị các bản ghi từ bảng cơ sở dữ liệu employee.

Nó cũng có các biểu tượng hành động cho mỗi bản ghi được hiển thị trong bảng, mà bạn có thể chọn để xem chi tiết, cập nhật hoặc xóa nó.

Chúng ta cũng sẽ thêm một nút tạo trên đầu của bảng dữ liệu có thể được sử dụng để tạo bản ghi mới trong bảng nhân viên.

Tạo một tệp có tên ‘index.php‘ và đặt đoạn mã sau vào đó:

Hướng thủ tục:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Dashboard</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.js"></script>
    <style type="text/css">
        .wrapper{
            width: 650px;
            margin: 0 auto;
        }
        .page-header h2{
            margin-top: 0;
        }
        table tr td:last-child a{
            margin-right: 15px;
        }
    </style>
    <script type="text/javascript">
        $(document).ready(function(){
            $('[data-toggle="tooltip"]').tooltip();   
        });
    </script>
</head>
<body>
    <div class="wrapper">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <div class="page-header clearfix">
                        <h2 class="pull-left">Employees Details</h2>
                        <a href="create.php" class="btn btn-success pull-right">Add New Employee</a>
                    </div>
                    <?php
                    // Include file config.php
                    require_once "config.php";
                    
                    // Cố gắng thực thi truy vấn
                    $sql = "SELECT * FROM employees";
                    if($result = mysqli_query($link, $sql)){
                        if(mysqli_num_rows($result) > 0){
                            echo "<table class='table table-bordered table-striped'>";
                                echo "<thead>";
                                    echo "<tr>";
                                        echo "<th>#</th>";
                                        echo "<th>Name</th>";
                                        echo "<th>Address</th>";
                                        echo "<th>Salary</th>";
                                        echo "<th>Action</th>";
                                    echo "</tr>";
                                echo "</thead>";
                                echo "<tbody>";
                                while($row = mysqli_fetch_array($result)){
                                    echo "<tr>";
                                        echo "<td>" . $row['id'] . "</td>";
                                        echo "<td>" . $row['name'] . "</td>";
                                        echo "<td>" . $row['address'] . "</td>";
                                        echo "<td>" . $row['salary'] . "</td>";
                                        echo "<td>";
                                            echo "<a href='read.php?id=". $row['id'] ."' title='View Record' data-toggle='tooltip'><span class='glyphicon glyphicon-eye-open'></span></a>";
                                            echo "<a href='update.php?id=". $row['id'] ."' title='Update Record' data-toggle='tooltip'><span class='glyphicon glyphicon-pencil'></span></a>";
                                            echo "<a href='delete.php?id=". $row['id'] ."' title='Delete Record' data-toggle='tooltip'><span class='glyphicon glyphicon-trash'></span></a>";
                                        echo "</td>";
                                    echo "</tr>";
                                }
                                echo "</tbody>";                            
                            echo "</table>";
                            // Giải phóng bộ nhớ
                            mysqli_free_result($result);
                        } else{
                            echo "<p class='lead'><em>Không tìm thấy bản ghi.</em></p>";
                        }
                    } else{
                        echo "ERROR: Không thể thực thi $sql. " . mysqli_error($link);
                    }
 
                    // Đóng kết nối
                    mysqli_close($link);
                    ?>
                </div>
            </div>        
        </div>
    </div>
</body>
</html>

Hướng đối tượng:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Dashboard</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.js"></script>
    <style type="text/css">
        .wrapper{
            width: 650px;
            margin: 0 auto;
        }
        .page-header h2{
            margin-top: 0;
        }
        table tr td:last-child a{
            margin-right: 15px;
        }
    </style>
    <script type="text/javascript">
        $(document).ready(function(){
            $('[data-toggle="tooltip"]').tooltip();   
        });
    </script>
</head>
<body>
    <div class="wrapper">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <div class="page-header clearfix">
                        <h2 class="pull-left">Employees Details</h2>
                        <a href="create.php" class="btn btn-success pull-right">Add New Employee</a>
                    </div>
                    <?php
                    // Include file config.php
                    require_once "config.php";
                    
                    // Cố gắng thực thi truy vấn
                    $sql = "SELECT * FROM employees";
                    if($result = $mysqli->query($sql)){
                        if($result->num_rows > 0){
                            echo "<table class='table table-bordered table-striped'>";
                                echo "<thead>";
                                    echo "<tr>";
                                        echo "<th>#</th>";
                                        echo "<th>Name</th>";
                                        echo "<th>Address</th>";
                                        echo "<th>Salary</th>";
                                        echo "<th>Action</th>";
                                    echo "</tr>";
                                echo "</thead>";
                                echo "<tbody>";
                                while($row = $result->fetch_array()){
                                    echo "<tr>";
                                        echo "<td>" . $row['id'] . "</td>";
                                        echo "<td>" . $row['name'] . "</td>";
                                        echo "<td>" . $row['address'] . "</td>";
                                        echo "<td>" . $row['salary'] . "</td>";
                                        echo "<td>";
                                            echo "<a href='read.php?id=". $row['id'] ."' title='View Record' data-toggle='tooltip'><span class='glyphicon glyphicon-eye-open'></span></a>";
                                            echo "<a href='update.php?id=". $row['id'] ."' title='Update Record' data-toggle='tooltip'><span class='glyphicon glyphicon-pencil'></span></a>";
                                            echo "<a href='delete.php?id=". $row['id'] ."' title='Delete Record' data-toggle='tooltip'><span class='glyphicon glyphicon-trash'></span></a>";
                                        echo "</td>";
                                    echo "</tr>";
                                }
                                echo "</tbody>";                            
                            echo "</table>";
                            // Giải phóng bộ nhớ
                            $result->free();
                        } else{
                            echo "<p class='lead'><em>Không tìm thấy bản ghi.</em></p>";
                        }
                    } else{
                        echo "ERROR: Không thể thực thi $sql. " . $mysqli->error;
                    }
                    
                    // Đóng kết nối
                    $mysqli->close();
                    ?>
                </div>
            </div>        
        </div>
    </div>
</body>
</html>

PDO:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Dashboard</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.js"></script>
    <style type="text/css">
        .wrapper{
            width: 650px;
            margin: 0 auto;
        }
        .page-header h2{
            margin-top: 0;
        }
        table tr td:last-child a{
            margin-right: 15px;
        }
    </style>
    <script type="text/javascript">
        $(document).ready(function(){
            $('[data-toggle="tooltip"]').tooltip();   
        });
    </script>
</head>
<body>
    <div class="wrapper">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <div class="page-header clearfix">
                        <h2 class="pull-left">Employees Details</h2>
                        <a href="create.php" class="btn btn-success pull-right">Add New Employee</a>
                    </div>
                    <?php
                    // Include file config.php
                    require_once "config.php";
                    
                    // Cố gắng thực thi truy vấn
                    $sql = "SELECT * FROM employees";
                    if($result = $pdo->query($sql)){
                        if($result->rowCount() > 0){
                            echo "<table class='table table-bordered table-striped'>";
                                echo "<thead>";
                                    echo "<tr>";
                                        echo "<th>#</th>";
                                        echo "<th>Name</th>";
                                        echo "<th>Address</th>";
                                        echo "<th>Salary</th>";
                                        echo "<th>Action</th>";
                                    echo "</tr>";
                                echo "</thead>";
                                echo "<tbody>";
                                while($row = $result->fetch()){
                                    echo "<tr>";
                                        echo "<td>" . $row['id'] . "</td>";
                                        echo "<td>" . $row['name'] . "</td>";
                                        echo "<td>" . $row['address'] . "</td>";
                                        echo "<td>" . $row['salary'] . "</td>";
                                        echo "<td>";
                                            echo "<a href='read.php?id=". $row['id'] ."' title='View Record' data-toggle='tooltip'><span class='glyphicon glyphicon-eye-open'></span></a>";
                                            echo "<a href='update.php?id=". $row['id'] ."' title='Update Record' data-toggle='tooltip'><span class='glyphicon glyphicon-pencil'></span></a>";
                                            echo "<a href='delete.php?id=". $row['id'] ."' title='Delete Record' data-toggle='tooltip'><span class='glyphicon glyphicon-trash'></span></a>";
                                        echo "</td>";
                                    echo "</tr>";
                                }
                                echo "</tbody>";                            
                            echo "</table>";
                            // Free result set
                            unset($result);
                        } else{
                            echo "<p class='lead'><em>Không tìm thấy bản ghi.</em></p>";
                        }
                    } else{
                        echo "ERROR: Không thể thực thi $sql. " . $mysqli->error;
                    }
                    
                    // Đóng kết nối
                    unset($pdo);
                    ?>
                </div>
            </div>        
        </div>
    </div>
</body>
</html>

Sau khi điền một số bản ghi, chúng ta nhận được dữ liệu giống như hình bên dưới.

Bảng dữ liệu nhân viên

4. Tạo trang Create

Trong phần này, chúng ta sẽ xây dựng chức năng Create cho ứng dụng CRUD của chúng ta.

Hãy tạo một tệp có tên ‘create.php‘ và đặt đoạn code sau vào trong đó.

Nó sẽ tạo ra một biểu mẫu để có thể được sử dụng để chèn các bản ghi vào bảng employees.

Hướng thủ tục:

<?php
// Include file config.php
require_once "config.php";
 
// Xác định các biến và khởi tạo các giá trị trống
$name = $address = $salary = "";
$name_err = $address_err = $salary_err = "";
 
// Xử lý dữ liệu biểu mẫu khi biểu mẫu được gửi
if($_SERVER["REQUEST_METHOD"] == "POST"){
    // Xác thực tên
    $input_name = trim($_POST["name"]);
    if(empty($input_name)){
        $name_err = "Please enter a name.";
    } elseif(!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
        $name_err = "Please enter a valid name.";
    } else{
        $name = $input_name;
    }
    
    // Xác thực địa chỉ
    $input_address = trim($_POST["address"]);
    if(empty($input_address)){
        $address_err = "Please enter an address.";     
    } else{
        $address = $input_address;
    }
    
    // Xác thực lương
    $input_salary = trim($_POST["salary"]);
    if(empty($input_salary)){
        $salary_err = "Please enter the salary amount.";     
    } elseif(!ctype_digit($input_salary)){
        $salary_err = "Please enter a positive integer value.";
    } else{
        $salary = $input_salary;
    }
    
    // Kiểm tra lỗi đầu vào trước khi chèn vào cơ sở dữ liệu
    if(empty($name_err) && empty($address_err) && empty($salary_err)){
        // Chuẩn bị một câu lệnh insert
        $sql = "INSERT INTO employees (name, address, salary) VALUES (?, ?, ?)";
         
        if($stmt = mysqli_prepare($link, $sql)){
            // Liên kết các biến với câu lệnh đã chuẩn bị
            mysqli_stmt_bind_param($stmt, "sss", $param_name, $param_address, $param_salary);
            
            // Thiết lập tham số
            $param_name = $name;
            $param_address = $address;
            $param_salary = $salary;
            
            // Cố gắng thực thi câu lệnh đã chuẩn bị
            if(mysqli_stmt_execute($stmt)){
                // Tạo bản ghi thành công. Chuyển hướng đến trang đích
                header("location: index.php");
                exit();
            } else{
                echo "Oh, no. Có gì đó sai sai. Vui lòng thử lại.";
            }
        }
         
        // Đóng câu lệnh
        mysqli_stmt_close($stmt);
    }
    
    // Đóng kết nối
    mysqli_close($link);
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Create Record</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        .wrapper{
            width: 500px;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <div class="page-header">
                        <h2>Create Record</h2>
                    </div>
                    <p>Please fill this form and submit to add employee record to the database.</p>
                    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
                        <div class="form-group <?php echo (!empty($name_err)) ? 'has-error' : ''; ?>">
                            <label>Name</label>
                            <input type="text" name="name" class="form-control" value="<?php echo $name; ?>">
                            <span class="help-block"><?php echo $name_err;?></span>
                        </div>
                        <div class="form-group <?php echo (!empty($address_err)) ? 'has-error' : ''; ?>">
                            <label>Address</label>
                            <textarea name="address" class="form-control"><?php echo $address; ?></textarea>
                            <span class="help-block"><?php echo $address_err;?></span>
                        </div>
                        <div class="form-group <?php echo (!empty($salary_err)) ? 'has-error' : ''; ?>">
                            <label>Salary</label>
                            <input type="text" name="salary" class="form-control" value="<?php echo $salary; ?>">
                            <span class="help-block"><?php echo $salary_err;?></span>
                        </div>
                        <input type="submit" class="btn btn-primary" value="Submit">
                        <a href="index.php" class="btn btn-default">Cancel</a>
                    </form>
                </div>
            </div>        
        </div>
    </div>
</body>
</html>

Hướng đối tượng:

<?php
// Include file config.php
require_once "config.php";
 
// Xác định các biến và khởi tạo các giá trị trống
$name = $address = $salary = "";
$name_err = $address_err = $salary_err = "";
 
// Xử lý dữ liệu biểu mẫu khi biểu mẫu được gửi
if($_SERVER["REQUEST_METHOD"] == "POST"){
    // Xác thực tên
    $input_name = trim($_POST["name"]);
    if(empty($input_name)){
        $name_err = "Please enter a name.";
    } elseif(!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
        $name_err = "Please enter a valid name.";
    } else{
        $name = $input_name;
    }
    
    // Xác thực địa chỉ
    $input_address = trim($_POST["address"]);
    if(empty($input_address)){
        $address_err = "Please enter an address.";     
    } else{
        $address = $input_address;
    }
    
    // Xác thực lương
    $input_salary = trim($_POST["salary"]);
    if(empty($input_salary)){
        $salary_err = "Please enter the salary amount.";     
    } elseif(!ctype_digit($input_salary)){
        $salary_err = "Please enter a positive integer value.";
    } else{
        $salary = $input_salary;
    }
    
    // Kiểm tra lỗi đầu vào trước khi chèn vào cơ sở dữ liệu
    if(empty($name_err) && empty($address_err) && empty($salary_err)){
        // Chuẩn bị một câu lệnh insert
        $sql = "INSERT INTO employees (name, address, salary) VALUES (?, ?, ?)";
 
        if($stmt = $mysqli->prepare($sql)){
            // Liên kết các biến với câu lệnh đã chuẩn bị
            $stmt->bind_param("sss", $param_name, $param_address, $param_salary);
            
            // Thiết lập tham số
            $param_name = $name;
            $param_address = $address;
            $param_salary = $salary;
            
            // Cố gắng thực thi câu lệnh đã chuẩn bị
            if($stmt->execute()){
                // Tạo bản ghi thành công. Chuyển hướng đến trang đích
                header("location: index.php");
                exit();
            } else{
                echo "Oh, no. Có gì đó sai sai. Vui lòng thử lại.";
            }
        }
         
        // Đóng câu lệnh
        $stmt->close();
    }
    
    // Đóng kết nối
    $mysqli->close();
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Create Record</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        .wrapper{
            width: 500px;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <div class="page-header">
                        <h2>Create Record</h2>
                    </div>
                    <p>Please fill this form and submit to add employee record to the database.</p>
                    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
                        <div class="form-group <?php echo (!empty($name_err)) ? 'has-error' : ''; ?>">
                            <label>Name</label>
                            <input type="text" name="name" class="form-control" value="<?php echo $name; ?>">
                            <span class="help-block"><?php echo $name_err;?></span>
                        </div>
                        <div class="form-group <?php echo (!empty($address_err)) ? 'has-error' : ''; ?>">
                            <label>Address</label>
                            <textarea name="address" class="form-control"><?php echo $address; ?></textarea>
                            <span class="help-block"><?php echo $address_err;?></span>
                        </div>
                        <div class="form-group <?php echo (!empty($salary_err)) ? 'has-error' : ''; ?>">
                            <label>Salary</label>
                            <input type="text" name="salary" class="form-control" value="<?php echo $salary; ?>">
                            <span class="help-block"><?php echo $salary_err;?></span>
                        </div>
                        <input type="submit" class="btn btn-primary" value="Submit">
                        <a href="index.php" class="btn btn-default">Cancel</a>
                    </form>
                </div>
            </div>        
        </div>
    </div>
</body>
</html>

PDO:

<?php
// Include file config.php
require_once "config.php";
 
// Xác định các biến và khởi tạo các giá trị trống
$name = $address = $salary = "";
$name_err = $address_err = $salary_err = "";
 
// Xử lý dữ liệu biểu mẫu khi biểu mẫu được gửi
if($_SERVER["REQUEST_METHOD"] == "POST"){
    // Xác thực tên
    $input_name = trim($_POST["name"]);
    if(empty($input_name)){
        $name_err = "Please enter a name.";
    } elseif(!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
        $name_err = "Please enter a valid name.";
    } else{
        $name = $input_name;
    }
    
    // Xác thực địa chỉ
    $input_address = trim($_POST["address"]);
    if(empty($input_address)){
        $address_err = "Please enter an address.";     
    } else{
        $address = $input_address;
    }
    
    // Xác thực lương
    $input_salary = trim($_POST["salary"]);
    if(empty($input_salary)){
        $salary_err = "Please enter the salary amount.";     
    } elseif(!ctype_digit($input_salary)){
        $salary_err = "Please enter a positive integer value.";
    } else{
        $salary = $input_salary;
    }
    
    // Kiểm tra lỗi đầu vào trước khi chèn vào cơ sở dữ liệu
    if(empty($name_err) && empty($address_err) && empty($salary_err)){
        // Chuẩn bị một câu lệnh insert
        $sql = "INSERT INTO employees (name, address, salary) VALUES (:name, :address, :salary)";
 
        if($stmt = $pdo->prepare($sql)){
            // Liên kết các biến với câu lệnh đã chuẩn bị
            $stmt->bindParam(":name", $param_name);
            $stmt->bindParam(":address", $param_address);
            $stmt->bindParam(":salary", $param_salary);
            
            // Thiết lập tham số
            $param_name = $name;
            $param_address = $address;
            $param_salary = $salary;
            
            // Cố gắng thực thi câu lệnh đã chuẩn bị
            if($stmt->execute()){
                // Tạo bản ghi thành công. Chuyển hướng đến trang đích
                header("location: index.php");
                exit();
            } else{
                echo "Oh, no. Có gì đó sai sai. Vui lòng thử lại.";
            }
        }
         
        // Đóng câu lệnh
        unset($stmt);
    }
    
    // Đóng kết nối
    unset($pdo);
}
?>
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Create Record</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        .wrapper{
            width: 500px;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <div class="page-header">
                        <h2>Create Record</h2>
                    </div>
                    <p>Please fill this form and submit to add employee record to the database.</p>
                    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
                        <div class="form-group <?php echo (!empty($name_err)) ? 'has-error' : ''; ?>">
                            <label>Name</label>
                            <input type="text" name="name" class="form-control" value="<?php echo $name; ?>">
                            <span class="help-block"><?php echo $name_err;?></span>
                        </div>
                        <div class="form-group <?php echo (!empty($address_err)) ? 'has-error' : ''; ?>">
                            <label>Address</label>
                            <textarea name="address" class="form-control"><?php echo $address; ?></textarea>
                            <span class="help-block"><?php echo $address_err;?></span>
                        </div>
                        <div class="form-group <?php echo (!empty($salary_err)) ? 'has-error' : ''; ?>">
                            <label>Salary</label>
                            <input type="text" name="salary" class="form-control" value="<?php echo $salary; ?>">
                            <span class="help-block"><?php echo $salary_err;?></span>
                        </div>
                        <input type="submit" class="btn btn-primary" value="Submit">
                        <a href="index.php" class="btn btn-default">Cancel</a>
                    </form>
                </div>
            </div>        
        </div>
    </div>
</body>
</html>

Tệp ‘create.php‘ tương tự sẽ hiển thị biểu mẫu HTML và xử lý dữ liệu biểu mẫu đã gửi. Nó cũng sẽ thực hiện xác nhận cơ bản trên đầu vào của người dùng (dòng số 11 đến 37) trước khi lưu dữ liệu.

5. Tạo trang Read

Bây giờ là lúc để xây dựng chức năng Read trong ứng dụng CRUD của chúng ta.

Hãy tạo một tệp có tên ‘read.php‘ và đặt đoạn mã sau vào trong đó. Nó chỉ đơn giản là lấy các bản ghi từ bảng employess dựa trên thuộc tính id của nhân viên.

Hướng thủ tục:

<?php
// Kiểm tra sự tồn tại của tham số id trước khi xử lý thêm
if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){
    // Include file config.php
    require_once "config.php";
    
    // Chuẩn bị câu lệnh Select
    $sql = "SELECT * FROM employees WHERE id = ?";
    
    if($stmt = mysqli_prepare($link, $sql)){
        // Liên kết các biến với câu lệnh đã chuẩn bị
        mysqli_stmt_bind_param($stmt, "i", $param_id);
        
        // Thiết lập tham số
        $param_id = trim($_GET["id"]);
        
        // Cố gắng thực thi câu lệnh đã chuẩn bị
        if(mysqli_stmt_execute($stmt)){
            $result = mysqli_stmt_get_result($stmt);
    
            if(mysqli_num_rows($result) == 1){
                /* Lấy hàng kết quả dưới dạng một mảng kết hợp. Vì tập kết quả chỉ chứa một hàng, chúng tôi không cần sử dụng vòng lặp while */
                $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
                
                // Lấy giá trị trường riêng lẻ
                $name = $row["name"];
                $address = $row["address"];
                $salary = $row["salary"];
            } else{
                // URL không chứa tham số id hợp lệ. Chuyển hướng đến trang error
                header("location: error.php");
                exit();
            }
            
        } else{
            echo "Oh, no. Có gì đó sai sai. Vui lòng thử lại.";
        }
    }
     
    // Đóng câu lệnh
    mysqli_stmt_close($stmt);
    
    // Đóng kết nối
    mysqli_close($link);
} else{
    // URL không chứa tham số id. Chuyển hướng đến trang error
    header("location: error.php");
    exit();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>View Record</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        .wrapper{
            width: 500px;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <div class="page-header">
                        <h1>View Record</h1>
                    </div>
                    <div class="form-group">
                        <label>Name</label>
                        <p class="form-control-static"><?php echo $row["name"]; ?></p>
                    </div>
                    <div class="form-group">
                        <label>Address</label>
                        <p class="form-control-static"><?php echo $row["address"]; ?></p>
                    </div>
                    <div class="form-group">
                        <label>Salary</label>
                        <p class="form-control-static"><?php echo $row["salary"]; ?></p>
                    </div>
                    <p><a href="index.php" class="btn btn-primary">Back</a></p>
                </div>
            </div>        
        </div>
    </div>
</body>
</html>

Hướng đối tượng:

<?php
// Kiểm tra sự tồn tại của tham số id trước khi xử lý thêm
if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){
    // Include file config.php
    require_once "config.php";
    
    // Chuẩn bị câu lệnh Select
    $sql = "SELECT * FROM employees WHERE id = ?";
    
    if($stmt = $mysqli->prepare($sql)){
        // Liên kết các biến với câu lệnh đã chuẩn bị
        $stmt->bind_param("i", $param_id);
        
        // Thiết lập tham số
        $param_id = trim($_GET["id"]);
        
        // Cố gắng thực thi câu lệnh đã chuẩn bị
        if($stmt->execute()){
            $result = $stmt->get_result();
            
            if($result->num_rows == 1){
                /* Lấy hàng kết quả dưới dạng một mảng kết hợp. Vì tập kết quả chỉ chứa một hàng, chúng tôi không cần sử dụng vòng lặp while */
                $row = $result->fetch_array(MYSQLI_ASSOC);
                
                // Lấy giá trị trường riêng lẻ
                $name = $row["name"];
                $address = $row["address"];
                $salary = $row["salary"];
            } else{
                // URL không chứa tham số id hợp lệ. Chuyển hướng đến trang error
                header("location: error.php");
                exit();
            }
            
        } else{
            echo "Oh, no. Có gì đó sai sai. Vui lòng thử lại.";
        }
    }
     
    // Đóng câu lệnh
    $stmt->close();
    
    // Đóng kết nối
    $mysqli->close();
} else{
    // URL không chứa tham số id. Chuyển hướng đến trang error
    header("location: error.php");
    exit();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>View Record</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        .wrapper{
            width: 500px;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <div class="page-header">
                        <h1>View Record</h1>
                    </div>
                    <div class="form-group">
                        <label>Name</label>
                        <p class="form-control-static"><?php echo $row["name"]; ?></p>
                    </div>
                    <div class="form-group">
                        <label>Address</label>
                        <p class="form-control-static"><?php echo $row["address"]; ?></p>
                    </div>
                    <div class="form-group">
                        <label>Salary</label>
                        <p class="form-control-static"><?php echo $row["salary"]; ?></p>
                    </div>
                    <p><a href="index.php" class="btn btn-primary">Back</a></p>
                </div>
            </div>        
        </div>
    </div>
</body>
</html>

PDO:

<?php
// Kiểm tra sự tồn tại của tham số id trước khi xử lý thêm
if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){
    // Include file config.php
    require_once "config.php";
    
    // Chuẩn bị câu lệnh Select
    $sql = "SELECT * FROM employees WHERE id = :id";
    
    if($stmt = $pdo->prepare($sql)){
        // Liên kết các biến với câu lệnh đã chuẩn bị
        $stmt->bindParam(":id", $param_id);
        
        // Thiết lập tham số
        $param_id = trim($_GET["id"]);
        
        // Cố gắng thực thi câu lệnh đã chuẩn bị
        if($stmt->execute()){
            if($stmt->rowCount() == 1){
                /* Lấy hàng kết quả dưới dạng một mảng kết hợp. Vì tập kết quả chỉ chứa một hàng, chúng tôi không cần sử dụng vòng lặp while */
                $row = $stmt->fetch(PDO::FETCH_ASSOC);
                
                // Lấy giá trị trường riêng lẻ
                $name = $row["name"];
                $address = $row["address"];
                $salary = $row["salary"];
            } else{
                // URL không chứa tham số id hợp lệ. Chuyển hướng đến trang error
                header("location: error.php");
                exit();
            }
            
        } else{
            echo "Oh, no. Có gì đó sai sai. Vui lòng thử lại.";
        }
    }
     
    // Đóng câu lệnh
    unset($stmt);
    
    // Đóng kết nối
    unset($pdo);
} else{
    // URL không chứa tham số id. Chuyển hướng đến trang error
    header("location: error.php");
    exit();
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>View Record</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        .wrapper{
            width: 500px;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <div class="page-header">
                        <h1>View Record</h1>
                    </div>
                    <div class="form-group">
                        <label>Name</label>
                        <p class="form-control-static"><?php echo $row["name"]; ?></p>
                    </div>
                    <div class="form-group">
                        <label>Address</label>
                        <p class="form-control-static"><?php echo $row["address"]; ?></p>
                    </div>
                    <div class="form-group">
                        <label>Salary</label>
                        <p class="form-control-static"><?php echo $row["salary"]; ?></p>
                    </div>
                    <p><a href="index.php" class="btn btn-primary">Back</a></p>
                </div>
            </div>        
        </div>
    </div>
</body>
</html>

6. Tạo trang Update

Tương tự, chúng ta có thể xây dựng chức năng Update trong ứng dụng CRUD.

Hãy tạo một tệp có tên ‘update.php‘ và đặt đoạn mã sau vào trong nó.

Nó sẽ cập nhật các bản ghi hiện có trong bảng employees dựa trên thuộc tính id của nhân viên.

Hướng thủ tục:

<?php
// Include file config.php
require_once "config.php";
 
// Xác định các biến và khởi tạo với các giá trị trống
$name = $address = $salary = "";
$name_err = $address_err = $salary_err = "";
 
// Xử lý dữ liệu biểu mẫu khi biểu mẫu được gửi
if(isset($_POST["id"]) && !empty($_POST["id"])){
    // Lấy dữ liệu đầu vào
    $id = $_POST["id"];
    
    // Xác thực tên
    $input_name = trim($_POST["name"]);
    if(empty($input_name)){
        $name_err = "Please enter a name.";
    } elseif(!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
        $name_err = "Please enter a valid name.";
    } else{
        $name = $input_name;
    }
    
    // Xác thực địa chỉ
    $input_address = trim($_POST["address"]);
    if(empty($input_address)){
        $address_err = "Please enter an address.";     
    } else{
        $address = $input_address;
    }
    
    // Xác thực lương
    $input_salary = trim($_POST["salary"]);
    if(empty($input_salary)){
        $salary_err = "Please enter the salary amount.";     
    } elseif(!ctype_digit($input_salary)){
        $salary_err = "Please enter a positive integer value.";
    } else{
        $salary = $input_salary;
    }
    
    // Kiểm tra lỗi đầu vào trước khi chèn vào cơ sở dữ liệu
    if(empty($name_err) && empty($address_err) && empty($salary_err)){
        // Chuẩn bị câu lệnh Update
        $sql = "UPDATE employees SET name=?, address=?, salary=? WHERE id=?";
         
        if($stmt = mysqli_prepare($link, $sql)){
            // Liên kết các biến với câu lệnh đã chuẩn bị
            mysqli_stmt_bind_param($stmt, "sssi", $param_name, $param_address, $param_salary, $param_id);
            
            // Thiết lập tham số
            $param_name = $name;
            $param_address = $address;
            $param_salary = $salary;
            $param_id = $id;
            
            // Cố gắng thực thi câu lệnh đã chuẩn bị
            if(mysqli_stmt_execute($stmt)){
                // Update thành công. Chuyển hướng đến trang đích
                header("location: index.php");
                exit();
            } else{
                echo "Oh, no. Có gì đó sai sai. Vui lòng thử lại.";
            }
        }
         
        // Đóng câu lệnh
        mysqli_stmt_close($stmt);
    }
    
    // Đóng két nối
    mysqli_close($link);
} else{
    // Kiểm tra sự tồn tại của tham số id trước khi xử lý thêm
    if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){
        // Lấy tham số URL
        $id =  trim($_GET["id"]);
        
        // Chuẩn bị câu lệnh select
        $sql = "SELECT * FROM employees WHERE id = ?";
        if($stmt = mysqli_prepare($link, $sql)){
            // Liên kết các biến với câu lệnh đã chuẩn bị
            mysqli_stmt_bind_param($stmt, "i", $param_id);
            
            // Thiết lập tham số
            $param_id = $id;
            
            // Cố gắng thực thi câu lệnh đã chuẩn bị
            if(mysqli_stmt_execute($stmt)){
                $result = mysqli_stmt_get_result($stmt);
    
                if(mysqli_num_rows($result) == 1){
                    /* Lấy hàng kết quả dưới dạng một mảng kết hợp. Vì tập kết quả chỉ chứa một hàng, chúng ta không cần sử dụng vòng lặp while */
                    $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
                    
                    // Lấy giá trị trường riêng lẻ
                    $name = $row["name"];
                    $address = $row["address"];
                    $salary = $row["salary"];
                } else{
                    // URL không có id hợp lệ. Chuyển hướng đến trang error
                    header("location: error.php");
                    exit();
                }
                
            } else{
                echo "Oh, no. Có gì đó sai sai. Vui lòng thử lại.";
            }
        }
        
        // Đóng câu lệnh
        mysqli_stmt_close($stmt);
        
        // Đóng kết nối
        mysqli_close($link);
    }  else{
        // URL không chứa tham số id. Chuyển hướng đến trang error
        header("location: error.php");
        exit();
    }
}
?>
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Update Record</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        .wrapper{
            width: 500px;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <div class="page-header">
                        <h2>Update Record</h2>
                    </div>
                    <p>Please edit the input values and submit to update the record.</p>
                    <form action="<?php echo htmlspecialchars(basename($_SERVER['REQUEST_URI'])); ?>" method="post">
                        <div class="form-group <?php echo (!empty($name_err)) ? 'has-error' : ''; ?>">
                            <label>Name</label>
                            <input type="text" name="name" class="form-control" value="<?php echo $name; ?>">
                            <span class="help-block"><?php echo $name_err;?></span>
                        </div>
                        <div class="form-group <?php echo (!empty($address_err)) ? 'has-error' : ''; ?>">
                            <label>Address</label>
                            <textarea name="address" class="form-control"><?php echo $address; ?></textarea>
                            <span class="help-block"><?php echo $address_err;?></span>
                        </div>
                        <div class="form-group <?php echo (!empty($salary_err)) ? 'has-error' : ''; ?>">
                            <label>Salary</label>
                            <input type="text" name="salary" class="form-control" value="<?php echo $salary; ?>">
                            <span class="help-block"><?php echo $salary_err;?></span>
                        </div>
                        <input type="hidden" name="id" value="<?php echo $id; ?>"/>
                        <input type="submit" class="btn btn-primary" value="Submit">
                        <a href="index.php" class="btn btn-default">Cancel</a>
                    </form>
                </div>
            </div>        
        </div>
    </div>
</body>
</html>

Hướng đối tượng:

<?php
// Include file config.php
require_once "config.php";
 
// Xác định các biến và khởi tạo với các giá trị trống
$name = $address = $salary = "";
$name_err = $address_err = $salary_err = "";
 
// Xử lý dữ liệu biểu mẫu khi biểu mẫu được gửi
if(isset($_POST["id"]) && !empty($_POST["id"])){
    // Lấy dữ liệu đầu vào
    $id = $_POST["id"];
    
    // Xác thực tên
    $input_name = trim($_POST["name"]);
    if(empty($input_name)){
        $name_err = "Please enter a name.";
    } elseif(!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
        $name_err = "Please enter a valid name.";
    } else{
        $name = $input_name;
    }
    
    // Xác thực địa chỉ
    $input_address = trim($_POST["address"]);
    if(empty($input_address)){
        $address_err = "Please enter an address.";     
    } else{
        $address = $input_address;
    }
    
    // Xác thức lương
    $input_salary = trim($_POST["salary"]);
    if(empty($input_salary)){
        $salary_err = "Please enter the salary amount.";     
    } elseif(!ctype_digit($input_salary)){
        $salary_err = "Please enter a positive integer value.";
    } else{
        $salary = $input_salary;
    }
    
    // Kiểm tra lỗi đầu vào trước khi chèn vào cơ sở dữ liệu
    if(empty($name_err) && empty($address_err) && empty($salary_err)){
        // Chuẩn bị câu lệnh Update
        $sql = "UPDATE employees SET name=?, address=?, salary=? WHERE id=?";
 
        if($stmt = $mysqli->prepare($sql)){
            // Liên kết các biến với câu lệnh đã chuẩn bị
            $stmt->bind_param("sssi", $param_name, $param_address, $param_salary, $param_id);
            
            // Thiết lập tham số
            $param_name = $name;
            $param_address = $address;
            $param_salary = $salary;
            $param_id = $id;
            
            // Cố gắng thực thi câu lệnh đã chuẩn bị
            if($stmt->execute()){
                // Update bản ghi thành công. Chuyển hướng đến trang đích
                header("location: index.php");
                exit();
            } else{
                echo "Oh, no. Có gì đó sai sai. Vui lòng thử lại.";
            }
        }
         
        // Đóng câu lệnh
        $stmt->close();
    }
    
    // Đóng kết nối
    $mysqli->close();
} else{
    // Kiểm tra sự tồn tại của tham số id trước khi xử lý thêm
    if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){
        // Lấy tham số URL
        $id =  trim($_GET["id"]);
        
        // Chuẩn bị câu lệnh Select
        $sql = "SELECT * FROM employees WHERE id = ?";
        if($stmt = $mysqli->prepare($sql)){
            // Liên kết các biến với câu lệnh đã chuẩn bị
            $stmt->bind_param("i", $param_id);
            
            // Thiết lập tham số
            $param_id = $id;
            
            // Cố gắng thực thi câu lệnh đã chuẩn bị
            if($stmt->execute()){
                $result = $stmt->get_result();
                
                if($result->num_rows == 1){
                    /* Lấy hàng kết quả dưới dạng một mảng kết hợp. Vì tập kết quả chỉ chứa một hàng, chúng tôi không cần sử dụng vòng lặp while */
                    $row = $result->fetch_array(MYSQLI_ASSOC);
                    
                    // Lấy giá trị trường riêng lẻ
                    $name = $row["name"];
                    $address = $row["address"];
                    $salary = $row["salary"];
                } else{
                    // URL không chứa id hợp lệ. Chuyển hướng đến trang error
                    header("location: error.php");
                    exit();
                }
                
            } else{
                echo "Oh, no. Có gì đó sai sai. Vui lòng thử lại.
            }
        }
        
        // Đóng câu lệnh
        $stmt->close();
        
        // Đóng kết nối
        $mysqli->close();
    }  else{
        // URL không chứa tham số id. Chuyển hướng đến trang error
        header("location: error.php");
        exit();
    }
}
?>
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Update Record</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        .wrapper{
            width: 500px;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <div class="page-header">
                        <h2>Update Record</h2>
                    </div>
                    <p>Please edit the input values and submit to update the record.</p>
                    <form action="<?php echo htmlspecialchars(basename($_SERVER['REQUEST_URI'])); ?>" method="post">
                        <div class="form-group <?php echo (!empty($name_err)) ? 'has-error' : ''; ?>">
                            <label>Name</label>
                            <input type="text" name="name" class="form-control" value="<?php echo $name; ?>">
                            <span class="help-block"><?php echo $name_err;?></span>
                        </div>
                        <div class="form-group <?php echo (!empty($address_err)) ? 'has-error' : ''; ?>">
                            <label>Address</label>
                            <textarea name="address" class="form-control"><?php echo $address; ?></textarea>
                            <span class="help-block"><?php echo $address_err;?></span>
                        </div>
                        <div class="form-group <?php echo (!empty($salary_err)) ? 'has-error' : ''; ?>">
                            <label>Salary</label>
                            <input type="text" name="salary" class="form-control" value="<?php echo $salary; ?>">
                            <span class="help-block"><?php echo $salary_err;?></span>
                        </div>
                        <input type="hidden" name="id" value="<?php echo $id; ?>"/>
                        <input type="submit" class="btn btn-primary" value="Submit">
                        <a href="index.php" class="btn btn-default">Cancel</a>
                    </form>
                </div>
            </div>        
        </div>
    </div>
</body>
</html>

PDO:

<?php
// Include file config.php
require_once "config.php";
 
// Xác định các biến và khởi tạo với các giá trị trống
$name = $address = $salary = "";
$name_err = $address_err = $salary_err = "";
 
// Xử lý dữ liệu biểu mẫu khi biểu mẫu được gửi
if(isset($_POST["id"]) && !empty($_POST["id"])){
    // Lấy dữ liệu đầu vào
    $id = $_POST["id"];
    
    // Xác thực tên
    $input_name = trim($_POST["name"]);
    if(empty($input_name)){
        $name_err = "Please enter a name.";
    } elseif(!filter_var($input_name, FILTER_VALIDATE_REGEXP, array("options"=>array("regexp"=>"/^[a-zA-Z\s]+$/")))){
        $name_err = "Please enter a valid name.";
    } else{
        $name = $input_name;
    }
    
    // Xác thực địa chỉ
    $input_address = trim($_POST["address"]);
    if(empty($input_address)){
        $address_err = "Please enter an address.";     
    } else{
        $address = $input_address;
    }
    
    // Xác thực lương
    $input_salary = trim($_POST["salary"]);
    if(empty($input_salary)){
        $salary_err = "Please enter the salary amount.";     
    } elseif(!ctype_digit($input_salary)){
        $salary_err = "Please enter a positive integer value.";
    } else{
        $salary = $input_salary;
    }
    
    // Kiểm tra lỗi đầu vào trước khi chèn vào cơ sở dữ liệu
    if(empty($name_err) && empty($address_err) && empty($salary_err)){
        // Chuẩn bị câu lệnh Update
        $sql = "UPDATE employees SET name=:name, address=:address, salary=:salary WHERE id=:id";
 
        if($stmt = $pdo->prepare($sql)){
            // Liên kết các biến với câu lệnh đã chuẩn bị
            $stmt->bindParam(":name", $param_name);
            $stmt->bindParam(":address", $param_address);
            $stmt->bindParam(":salary", $param_salary);
            $stmt->bindParam(":id", $param_id);
            
            // Thiết lập tham số
            $param_name = $name;
            $param_address = $address;
            $param_salary = $salary;
            $param_id = $id;
            
            // Cố gắng thực thi câu lệnh đã chuẩn bị
            if($stmt->execute()){
                // Update thành công. Chuyển hướng đến trang đích
                header("location: index.php");
                exit();
            } else{
                echo "Oh, no. Có gì đó sai sai. Vui lòng thử lại.";
            }
        }
         
        // Đóng câu lệnh
        unset($stmt);
    }
    
    // Đóng két nối
    unset($pdo);
} else{
    // iểm tra sự tồn tại của tham số id trước khi xử lý thêm
    if(isset($_GET["id"]) && !empty(trim($_GET["id"]))){
        // Lấy tham số URL
        $id =  trim($_GET["id"]);
        
        // Chuẩn bị câu lệnh select
        $sql = "SELECT * FROM employees WHERE id = :id";
        if($stmt = $pdo->prepare($sql)){
            // Liên kết các biến với câu lệnh đã chuẩn bị
            $stmt->bindParam(":id", $param_id);
            
            // Thiết lập tham số
            $param_id = $id;
            
            // Cố gắng thực thi câu lệnh đã chuẩn bị
            if($stmt->execute()){
                if($stmt->rowCount() == 1){
                    /* Lấy hàng kết quả dưới dạng một mảng kết hợp. Vì tập kết quả chỉ chứa một hàng, chúng ta không cần sử dụng vòng lặp while */
                    $row = $stmt->fetch(PDO::FETCH_ASSOC);
                
                    // Lấy giá trị trường riêng lẻ
                    $name = $row["name"];
                    $address = $row["address"];
                    $salary = $row["salary"];
                } else{
                    // URL không có id hợp lệ. Chuyển hướng đến trang error
                    header("location: error.php");
                    exit();
                }
                
            } else{
                echo "Oh, no. Có gì đó sai sai. Vui lòng thử lại.";
            }
        }
        
        // Đóng câu lệnh
        unset($stmt);
        
        // Đóng kết nối
        unset($pdo);
    }  else{
        // URL không chứa tham số id. Chuyển hướng đến trang error
        header("location: error.php");
        exit();
    }
}
?>
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Update Record</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        .wrapper{
            width: 500px;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <div class="page-header">
                        <h2>Update Record</h2>
                    </div>
                    <p>Please edit the input values and submit to update the record.</p>
                    <form action="<?php echo htmlspecialchars(basename($_SERVER['REQUEST_URI'])); ?>" method="post">
                        <div class="form-group <?php echo (!empty($name_err)) ? 'has-error' : ''; ?>">
                            <label>Name</label>
                            <input type="text" name="name" class="form-control" value="<?php echo $name; ?>">
                            <span class="help-block"><?php echo $name_err;?></span>
                        </div>
                        <div class="form-group <?php echo (!empty($address_err)) ? 'has-error' : ''; ?>">
                            <label>Address</label>
                            <textarea name="address" class="form-control"><?php echo $address; ?></textarea>
                            <span class="help-block"><?php echo $address_err;?></span>
                        </div>
                        <div class="form-group <?php echo (!empty($salary_err)) ? 'has-error' : ''; ?>">
                            <label>Salary</label>
                            <input type="text" name="salary" class="form-control" value="<?php echo $salary; ?>">
                            <span class="help-block"><?php echo $salary_err;?></span>
                        </div>
                        <input type="hidden" name="id" value="<?php echo $id; ?>"/>
                        <input type="submit" class="btn btn-primary" value="Submit">
                        <a href="index.php" class="btn btn-default">Cancel</a>
                    </form>
                </div>
            </div>        
        </div>
    </div>
</body>
</html>

7. Tạo trang Delete

Bây giờ, chúng ta sẽ xây dựng chức năng Delete trong ứng dụng CRUD.

Hãy tạo một tệp có tên ‘delete.php‘ và đặt đoạn mã sau vào trong nó.

Nó sẽ xóa các bản ghi hiện có khỏi bảng employees dựa trên thuộc tính id của nhân viên.

Hướng thủ tục:

<?php
// Quy trình xóa bản ghi sau khi đã xác nhận
if(isset($_POST["id"]) && !empty($_POST["id"])){
    // Include file config.php
    require_once "config.php";
    
    // Chuẩn bị câu lệnh delete
    $sql = "DELETE FROM employees WHERE id = ?";
    
    if($stmt = mysqli_prepare($link, $sql)){
        // Liên kết các biến với câu lệnh đã chuẩn bị
        mysqli_stmt_bind_param($stmt, "i", $param_id);
        
        // Thiết lập tham số
        $param_id = trim($_POST["id"]);
        
        // Cố gắng thực thi câu lệnh đã chuẩn bị
        if(mysqli_stmt_execute($stmt)){
            // Xóa bản ghi thành công. Chuyển hướng đến trang đích
            header("location: index.php");
            exit();
        } else{
            echo "Oh, no. Có gì đó sai sai. Vui lòng thử lại.";
        }
    }
     
    // Đóng câu lệnh
    mysqli_stmt_close($stmt);
    
    // Đóng kết nối
    mysqli_close($link);
} else{
    // Kiểm tra sự tồn tại của tham số id
    if(empty(trim($_GET["id"]))){
        // URL không chứa tham số id. Chuyển hướng đén trang error
        header("location: error.php");
        exit();
    }
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>View Record</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        .wrapper{
            width: 500px;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <div class="page-header">
                        <h1>Delete Record</h1>
                    </div>
                    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
                        <div class="alert alert-danger fade in">
                            <input type="hidden" name="id" value="<?php echo trim($_GET["id"]); ?>"/>
                            <p>Are you sure you want to delete this record?</p><br>
                            <p>
                                <input type="submit" value="Yes" class="btn btn-danger">
                                <a href="index.php" class="btn btn-default">No</a>
                            </p>
                        </div>
                    </form>
                </div>
            </div>        
        </div>
    </div>
</body>
</html>

Hướng đối tượng:

<?php
// Quy trình xóa bản ghi sau khi đã xác nhận
if(isset($_POST["id"]) && !empty($_POST["id"])){
    // Include file config.php
    require_once "config.php";
    
    // Chuẩn bị câu lệnh delete
    $sql = "DELETE FROM employees WHERE id = ?";
    
    if($stmt = $mysqli->prepare($sql)){
        // Liên kết các biến với câu lệnh đã chuẩn bị
        $stmt->bind_param("i", $param_id);
        
        // Thiết lập tham số
        $param_id = trim($_POST["id"]);
        
        // Attempt to execute the prepared statement
        if($stmt->execute()){
            // Xóa bản thi thành công. Chuyển hướng đến trang đích
            header("location: index.php");
            exit();
        } else{
            echo "Oh, no. Có gì đó sai sai. Vui lòng thử lại.";
        }
    }
     
    // Đóng câu lệnh
    $stmt->close();
    
    // Đóng kết nối
    $mysqli->close();
} else{
    // Kiểm tra sự tồn tại của tham số id
    if(empty(trim($_GET["id"]))){
        // URL không chứa tham số id. Chuyển hướng đén trang error
        header("location: error.php");
        exit();
    }
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>View Record</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        .wrapper{
            width: 500px;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <div class="page-header">
                        <h1>Delete Record</h1>
                    </div>
                    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
                        <div class="alert alert-danger fade in">
                            <input type="hidden" name="id" value="<?php echo trim($_GET["id"]); ?>"/>
                            <p>Are you sure you want to delete this record?</p><br>
                            <p>
                                <input type="submit" value="Yes" class="btn btn-danger">
                                <a href="index.php" class="btn btn-default">No</a>
                            </p>
                        </div>
                    </form>
                </div>
            </div>        
        </div>
    </div>
</body>
</html>

PDO:

<?php
// Quy trình xóa bản ghi sau khi đã xác nhận
if(isset($_POST["id"]) && !empty($_POST["id"])){
    // Include file config.php
    require_once "config.php";
    
    // Chuẩn bị câu lệnh delete
    $sql = "DELETE FROM employees WHERE id = :id";
    
    if($stmt = $pdo->prepare($sql)){
        // Liên kết các biến với câu lệnh đã chuẩn bị
        $stmt->bindParam(":id", $param_id);
        
        // Thiết lập tham số
        $param_id = trim($_POST["id"]);
        
        // Cố gắng thực thi câu lệnh đã chuẩn bị
        if($stmt->execute()){
            // Xóa bản ghi thành công. Chuyển hướng đến trang đích
            header("location: index.php");
            exit();
        } else{
            echo "Oh, no. Có gì đó sai sai. Vui lòng thử lại.";
        }
    }
     
    // Đóng câu lệnh
    unset($stmt);
    
    // Đóng kết nối
    unset($pdo);
} else{
    // Kiểm tra sự tồn tại của tham số id
    if(empty(trim($_GET["id"]))){
        // URL không chứa tham số id. Chuyển hướng đén trang error
        header("location: error.php");
        exit();
    }
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>View Record</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        .wrapper{
            width: 500px;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <div class="page-header">
                        <h1>Delete Record</h1>
                    </div>
                    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
                        <div class="alert alert-danger fade in">
                            <input type="hidden" name="id" value="<?php echo trim($_GET["id"]); ?>"/>
                            <p>Are you sure you want to delete this record?</p><br>
                            <p>
                                <input type="submit" value="Yes" class="btn btn-danger">
                                <a href="index.php" class="btn btn-default">No</a>
                            </p>
                        </div>
                    </form>
                </div>
            </div>        
        </div>
    </div>
</body>
</html>

8. Tạo trang Error

Cuối cùng, hãy tạo thêm một tệp ‘error.php‘.

Trang này sẽ được hiển thị nếu yêu cầu không hợp lệ, tức là nếu tham số id bị thiếu trong chuỗi truy vấn URL hoặc nó không hợp lệ.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Error</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        .wrapper{
            width: 750px;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div class="wrapper">
        <div class="container-fluid">
            <div class="row">
                <div class="col-md-12">
                    <div class="page-header">
                        <h1>Invalid Request</h1>
                    </div>
                    <div class="alert alert-danger fade in">
                        <p>Sorry, you've made an invalid request. Please <a href="index.php" class="alert-link">go back</a> and try again.</p>
                    </div>
                </div>
            </div>        
        </div>
    </div>
</body>
</html>

Chúc mừng bạn đã tạo xong ứng dụng CRUD với MySQL & PHP

Sau tất cả, chúng ta đã tạo xong các chức năng Create, Read, Update Delete cho ứng dụng CRUD.

Bạn cũng biết cả 3 cách tạo ứng dụng CRUD, bao gồm: Hướng thủ tục, Hướng đối tượng PDO.

Mình khuyên bạn nên tìm hiểu từ bài Hướng dẫn kết nối CSDL để hiểu rõ cách thực hiện từng chức năng.

Bài viết này chỉ hướng dẫn bạn thêm phần lắng nghe sự kiện và kết xuất dữ liệu dựa theo các hành động cụ thể mà thôi.

Chúc bạn học tốt.

PHPDev

Câu lệnh DELETE | MySQL & PHP

Trong bài hướng dẫn tự học lập trình PHP này, bạn sẽ tìm hiểu làm thế nào để sử dụng PHP để xóa (DELETE) các bản ghi từ bảng MySQL.

Trong bài hướng dẫn tự học lập trình PHP này, bạn sẽ tìm hiểu làm thế nào để sử dụng PHP để xóa (DELETE) các bản ghi từ bảng MySQL.

Xóa bảng cơ sở dữ liệu với câu lệnh DELETE

Giống như khi bạn chèn các bản ghi vào các bảng CSDL, bạn cũng có thể xóa (DELETE) các bản ghi khỏi một bảng CSDL bằng cách sử dụng câu lệnh DELETE trong SQL.

Câu lệnh DELETE thường được sử dụng kết hợp với mệnh đề WHERE để chỉ xóa những bản ghi phù hợp với tiêu chí cụ thể.

Cú pháp cơ bản của câu lệnh DELETE

DELETE FROM table_name WHERE column_name=some_value

Bây giờ, giống như tất cả những bài khác, chúng ta hãy tạo một truy vấn SQL bằng cách sử dụng câu lệnh DELETE và mệnh đề WHERE, sau đó chúng ta sẽ thực hiện truy vấn này thông qua việc chuyển nó đến hàm mysqli_query() của PHP để xóa các bản ghi bảng.

Hãy xem xét bảng person sau trong cơ sở dữ liệu demo:

Bảng person trong CSDL demo
Bảng person trong CSDL demo sừ dụng trong ví dụ

Hướng dẫn sử dụng xóa bản ghi trong bảng CSDL với câu lệnh DELETE

Ví dụ sử dụng câu lệnh DELETE | MySQL & PHP
Ví dụ sử dụng câu lệnh DELETE | MySQL & PHP

Ví dụ 1: Hướng dẫn xóa bản ghi bằng câu lệnh DELETE sử dụng MySQLi hướng thủ tục

<?php
/* Cố gắng kết nối tới MySQL Server. Giả sử bạn đang chạy MySQL Server
với thiết lập mặc định (user 'root' và không có mật khẩu)*/
$link = mysqli_connect("localhost", "root", "", "demo");
 
// Kiểm tra kết nối
if($link === false){
    die("ERROR: Không thể kết nối. " . mysqli_connect_error());
}
 
// Cố gắng thực thi truy vấn
$sql = "DELETE FROM persons WHERE first_name='Triệu Tòn'";
if(mysqli_query($link, $sql)){
    echo "Xóa bản ghi thành công.";
} else{
    echo "ERROR: Không thể thực thi truy vấn $sql. " . mysqli_error($link);
}
 
// Đóng kết nối
mysqli_close($link);
?>

Ví dụ 2: Hướng dẫn xóa bản ghi bằng câu lệnh DELETE sử dụng MySQLi hướng đối tượng

<?php
/* Cố gắng kết nối tới MySQL Server. Giả sử bạn đang chạy MySQL Server
với thiết lập mặc định (user 'root' và không có mật khẩu)*/
$mysqli = new mysqli("localhost", "root", "", "demo");
 
// Kiểm tra kết nối
if($mysqli === false){
    die("ERROR: Không thể kết nối. " . $mysqli->connect_error);
}
 
// Cố gắng thực thi truy vấn
$sql = "DELETE FROM persons WHERE first_name='Triệu Tòn'";
if($mysqli->query($sql) === true){
    echo "Xóa bản ghi thành công.";
} else{
    echo "ERROR: Không thể thực thi truy vấn $sql. " . $mysqli->error;
}
 
// Đóng kết nối
$mysqli->close();
?>

Ví dụ 3: Hướng dẫn xóa bản ghi bằng câu lệnh DELETE sử dụng PDO

<?php
/* Cố gắng kết nối tới MySQL Server. Giả sử bạn đang chạy MySQL Server
với thiết lập mặc định (user 'root' và không có mật khẩu)*/
try{
    $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
    // Thiết lập chế độ PDO Error thành Ngoại lệ
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
    die("ERROR: Không thể kết nối. " . $e->getMessage());
}
 
// Cố gắng thực thi truy vấn
try{
    $sql = "DELETE FROM persons WHERE first_name='Triệu Tòn'";  
    $pdo->exec($sql);
    echo "Xóa bản ghi thành công.";
} catch(PDOException $e){
    die("ERROR: Không thể thực thi truy vấn $sql. " . $e->getMessage());
}
 
// Đóng kết nối
unset($pdo);
?>

Đây là kết quả sau khi sử dụng câu lệnh DELETE xóa first_name là “Triệu Tòn”

Kết quả sau khi sử dụng câu lệnh DELETE
Kết quả sau khi sử dụng câu lệnh DELETE

CẢNH BÁO: Mệnh đề WHERE trong câu lệnh DELETE chỉ định bản ghi hoặc bản ghi nào sẽ bị xóa. Nếu bạn bỏ qua mệnh đề WHERE, tất cả các bản ghi sẽ bị xóa.

Bạn đã hiểu cách sử dụng câu lệnh DELETE chưa?

Câu lệnh DELETE sử dụng để xóa bản ghi trong CSDL. Tuy nhiên, câu lệnh DELETE khá nguy hiểm bởi nếu bạn bỏ qua mệnh đề WHERE, toàn bộ dữ liệu sẽ bị xóa.

Hãy cẩn thận khi sử dụng câu lệnh DELETE nhé.

Chúc bạn học MySQL tốt.

PHPDev

Câu lệnh UPDATE | MySQL & PHP

Chúng ta sẽ thực hiện sử dụng câu lệnh UPDATE theo 3 cách: Sử dụng MySQLi hướng thủ tục, hướng đối tượng và sử dụng PDO.

Trong bài hướng dẫn học lập trình MySQL với PHP này. Mình sẽ hướng dẫn bạn về câu lệnh UPDATE.

Cập nhật dữ liệu lên bảng CSDL

Các câu lệnh UPDATE được sử dụng để thay đổi hoặc sửa đổi các bản ghi hiện có trong một bảng cơ sở dữ liệu.

Giả sử, website / ứng dụng của bạn cho phép người dùng thay đổi thông tin tài khoản sau khi đã tạo hồ sơ.

Lúc này người dùng sẽ nhập thông tin và gửi truy vấn đến CSDL (thực ra họ nhập xong thì Enter thôi. Chúng ta sẽ phải bắt sự kiện để chèn truy vấn) để yêu cầu cập nhật lại thông tin theo những thay đổi của họ.

Hoặc thực hiện bất kỳ thay đổi nào trên website mà cần thay đổi dữ liệu trên bảng CSDL thì cũng cần đến UPDATE.

Để làm việc này, câu lệnh UPDATE cần được sử dụng kết hợp với Mệnh đề WHERE để thực thiện cập nhật dữ liệu tại nơi được chỉ định.

Cú pháp cơ bản của câu lệnh UPDATE như sau:

UPDATE table_name SET column1=value, column2=value2,... WHERE column_name=some_value

Và cũng như các bài học trước. Ví dụ minh họa về câu lệnh UPDATE là rất cần thiết để bạn hiểu rõ cách sử dụng.

Chúng ta hãy tạo một truy vấn SQL bằng cách sử dụng câu lệnh UPDATE và mệnh đề WHERE, sau đó chúng ta sẽ thực hiện truy vấn này thông qua việc chuyển nó đến hàm mysqli_query() của PHP để cập nhật các bản ghi trên bảng CSDL.

Hãy xem xét bảng persons sau trong cơ sở dữ liệu demo:

Bảng person trong CSDL demo
Bảng persons trong CSDL demo

Code PHP trong các ví dụ sau sẽ cập nhật địa chỉ email của một người trong bảng persons có id bằng 1.

Ví dụ hướng dẫn sử dụng câu lệnh UPDATE

Câu lệnh UPDATE | MySQL & PHP
Câu lệnh UPDATE | MySQL & PHP

Chúng ta sẽ thực hiện sử dụng câu lệnh UPDATE theo 3 cách: Sử dụng MySQLi hướng thủ tục, hướng đối tượng và sử dụng PDO.

Ví dụ 1: Hướng dẫn sử dụng câu lệnh UPDATE bằng MySQLi hướng thủ tục

<?php

/* Cố gắng kết nối tới MySQL Server. Giả sử bạn đang chạy MySQL Server với thiết lập mặc định (user 'root' và không có mật khẩu)*/

$link = mysqli_connect("localhost", "root", "", "demo");

// Kiểm tra kết nối
if($link === false){
    die("ERROR: Không thể kết nối.". mysqli_connect_error());
}

// Thực thi câu lệnh UPDATE
$sql = "UPDATE persons SET email='trieusenh1@gmail.com' WHERE id=1";

if(mysqli_query($link, $sql)){
    echo "Bản ghi được cập nhật thành công";
}else{
    echo "ERROR: Không thể cập nhật bản ghi $sql".mysqli_error($link);
}

// Đóng kết nối
mysqli_close($link);
?>

Ví dụ 2: Hướng dẫn sử dụng câu lệnh UPDATE bằng MySQLi hướng đối tượng

<?php

/* Cố gắng kết nối tới MySQL Server. Giả sử bạn đang chạy MySQL Server với thiết lập mặc định (user 'root' và không có mật khẩu)*/

$mysqli = new mysqli("localhost", "root", "", "demo");

// Kiểm tra kết nối
if($link === false){
    die("ERROR: Không thể kết nối.". $mysqli->connect_error);
}

// Thực thi câu lệnh UPDATE
$sql = "UPDATE persons SET email='trieusenh1@gmail.com' WHERE id=1";

if($mysqli->query($sql) === true{
    echo "Bản ghi được cập nhật thành công";
}else{
    echo "ERROR: Không thể cập nhật bản ghi $sql. " .$mysqli->error;
}

// Đóng kết nối
$mysqli->close();
?>

Ví dụ 3: Hướng dẫn sử dụng câu lệnh UPDATE với PDO

<?php

/* Cố gắng kết nối tới MySQL Server. Giả sử bạn đang chạy MySQL Server với thiết lập mặc định (user 'root' và không có mật khẩu)*/

try{
    $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
    // Thiết lập chế độ PDO ERROR thành Ngoại lệ
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
    die("ERROR: Không thể kết nối. " . $e->getMessage());
}
 
// Thực thi câu lệnh UPDATE
try{
    $sql = "UPDATE persons SET email='trieusenh1@gmail.com' WHERE id=1";    
    $pdo->exec($sql);
    echo "Cập nhật bản ghi thành công.";
} catch(PDOException $e){
    die("ERROR: Không thể thực thi truy $sql. " . $e->getMessage());
}

// Đóng kết nối
unset($pdo);
?>

Kết thúc, trong CSDL chúng ta có được kết quả như sau:

Kết quả sau khi cập nhật thành công với câu lệnh UPDATE

Lời kết

Như vậy là qua bài này bạn đã được tìm hiểu về cách sử dụng câu lệnh UPDATE để cập nhật dữ liệu lên bảng CSDL.

Cách làm này là cách làm cứng để bạn hiểu chúng ta sẽ làm như thế nào. Còn trong thực tế, dữ liệu cần cập nhật của chúng ta sẽ là động, chúng ta sẽ phải bắt sự kiện để thực thi.

Nếu muốn tìm hiểu thì có thể đọc bài viết này: Cách cập nhật dữ liệu bằng MySQLi

Chúc bạn thành công!

PHPDev

Mệnh đề ORDER BY | MySQL & PHP

Trong bài Hướng dẫn sử dụng MySQL trong PHP này, bạn sẽ tìm hiểu làm thế nào để sắp xếp và hiển thị các dữ liệu từ bảng MySQL theo thứ tự tăng dần và giảm dần.

Trong bài Hướng dẫn sử dụng MySQL trong PHP này, bạn sẽ tìm hiểu làm thế nào để sắp xếp và hiển thị các dữ liệu từ bảng MySQL theo thứ tự tăng dầngiảm dần.

1. Sắp xếp thứ tự của kết quả truy vấn với ORDER BY

Mệnh đề ORDER BY trong MySQL

Mệnh đề ORDER BY được sử dụng kết hợp với câu lệnh SELECT để xem dữ liệu từ một bảng được sắp xếp theo một trường cụ thể.

Mệnh đề ORDER BY cho phép bạn xác định tên trường để sắp xếp theo và hướng sắp xếp tăng dần hoặc giảm dần.

Cú pháp cơ bản của mệnh đề ORDER BY như sau:

SELECT column_name(s) FROM table_name ORDER BY column_name(s) ASC|DESC

Trong đó, theo mặc định kết quả của truy vấn sử dụng ORDER BY sẽ sắp xếp theo thứ tự tăng dần (ASC).

Nếu bạn muốn sắp xếp theo thứ tự giảm dần, hãy thêm tùy chọn DESC vào câu truy vấn.

Ví dụ sử dụng ORDER BY

Trong ví dụ này, chúng ta hãy tạo một truy vấn SQL bằng cách sử dụng mệnh đề ORDER BY trong câu lệnh SELECT.

Sau đó chúng ta sẽ thực hiện truy vấn này thông qua việc chuyển nó đến hàm mysqli_query() của PHP để lấy dữ liệu theo thứ tự.

Hãy xem xét bảng person sau trong cơ sở dữ liệu demo:

Bảng person trong CSDL demo
Ví dụ về bảng person chúng ta sẽ sử dụng.

2.1. Sử dụng ORDER BY theo phương pháp MySQLi hướng thủ tục

<?php
/* Cố gắng kết nối với MySQL Server. Giả sử bạn đang chạy MySQL Server với tài khoản mặc định (user là root và không có mật khẩu) */
$link = mysqli_connect("localhost", "root", "", "demo");
 
// Kiểm tra kết nối
if($link === false){
    die("ERROR: Không thể kết nối. " . mysqli_connect_error());
}
 
// Cố gắng thực thi truy vấn với mệnh đề ORDER BY
// Mặc định sắp xếp theo thứ tự tăng dần
$sql = "SELECT * FROM persons ORDER BY first_name";
if($result = mysqli_query($link, $sql)){
    if(mysqli_num_rows($result) > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";
                echo "<th>email</th>";
            echo "</tr>";
        while($row = mysqli_fetch_array($result)){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['first_name'] . "</td>";
                echo "<td>" . $row['last_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        // Giải phóng bộ nhớ của biến
        mysqli_free_result($result);
    } else{
        echo "Không có bản ghi nào được tìm thấy.";
    }
} else{
    echo "ERROR: Không thể thực thi $sql. " . mysqli_error($link);
}
 
// Đóng kết nối
mysqli_close($link);
?>

2.2. Sử dụng ORDER BY theo phương pháp MySQLi hướng đối tượng

<?php
/* Cố gắng kết nối với MySQL Server. Giả sử bạn đang chạy MySQL Server với tài khoản mặc định (user là root và không có mật khẩu) */
$mysqli = new mysqli("localhost", "root", "", "demo");
 
// Kiểm tra kết nối
if($mysqli === false){
    die("ERROR: Không thể kết nối. " . $mysqli->connect_error);
}
 
// Cố gắng thực thi truy vấn với mệnh đề ORDER BY
// Mặc định sắp xếp theo thứ tự tăng dần
$sql = "SELECT * FROM persons ORDER BY firts_name";
if($result = $mysqli->query($sql)){
    if($result->num_rows > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";
                echo "<th>email</th>";
            echo "</tr>";
        while($row = $result->fetch_array()){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['first_name'] . "</td>";
                echo "<td>" . $row['last_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        // Giải phóng bộ nhớ của biến
        $result->free();
    } else{
        echo "Không có bản ghi nào được tìm thấy.";
    }
} else{
    echo "ERROR: Không thể thực thi $sql. " . $mysqli->error;
}
 
// Đóng kết nối
$mysqli->close();
?>

2.3. Sử dụng ORDER BY với PDO

<?php
/* Cố gắng kết nối với MySQL Server. Giả sử bạn đang chạy MySQL Server với tài khoản mặc định (user là root và không có mật khẩu) */
try{
    $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
    // Thiết lập PDO error thành ngoại lệ
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
    die("ERROR: Không thể kết nối. " . $e->getMessage());
}
 
// Cố gắng thực thi truy vấn
try{
    $sql = "SELECT * FROM persons ORDER BY first_name";
    $result = $pdo->query($sql);
    if($result->rowCount() > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";
                echo "<th>email</th>";
            echo "</tr>";
        while($row = $result->fetch()){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['first_name'] . "</td>";
                echo "<td>" . $row['last_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        // Giải phóng bộ nhớ biến
        unset($result);
    } else{
        echo "Không có bản ghi nào được tìm thấy.";
    }
} catch(PDOException $e){
    die("ERROR: Không thể thực thi $sql. " . $e->getMessage());
}
 
// Close connection
unset($pdo);
?>

Sau khi thực hiện, chúng ta sẽ có được kết quả như sau:

Bạn đã hiểu cách sử dụng mệnh đề ORDER BY chưa?

Như vậy là bài này mình đã hướng dẫn bạn sử dụng mệnh đề ORDER BY để sắp xếp dữ liệu lấy ra từ bảng MySQL theo chiều tăng dần (ASC) hoặc giảm dần (DESC).

Câu lệnh SQL sử dụng ORDER BY cũng đơn giản phải không nào? 😀

Hãy cố gắng làm lại và ghi nhớ nhé. Chúc bạn học tốt!

PHPDev

Mệnh đề LIMIT | MySQL & PHP

Trong bài hướng dẫn Học PHP và MySQL này, bạn sẽ được tìm hiểu làm thế nào để lấy giới hạn một số bản ghi từ một cơ sở dữ liệu bằng mệnh đề LIMIT.

Trong bài hướng dẫn Học PHP và MySQL này, bạn sẽ được tìm hiểu làm thế nào để lấy giới hạn một số bản ghi từ một cơ sở dữ liệu bằng mệnh đề LIMIT.

Mệnh đề LIMIT trong MySQL
Mệnh đề LIMIT trong MySQL

Mệnh đề LIMIT là gì?

Mệnh đề LIMIT được sử dụng để hạn chế số lượng hàng (rows) được trả về bởi câu lệnh SELECT.

Tính năng này rất hữu ích để tối ưu hóa thời gian tải trang cũng như tăng cường khả năng đọc của trang web.

Ví dụ: Bạn có thể chia số lượng lớn các bản ghi trong nhiều trang bằng cách sử dụng phân trang PHP, trong đó số lượng bản ghi giới hạn sẽ được tải trên mỗi trang từ cơ sở dữ liệu khi người dùng yêu cầu trang đó bằng cách nhấp vào liên kết phân trang.

Cú pháp cơ bản của mệnh đề LIMIT như sau:

SELECT column_name(s) FROM table_name LIMIT row_offset, row_count;

Tham số trong mệnh đề LIMIT

Mệnh đề LIMIT chấp nhận một hoặc hai tham số (phải là số nguyên không âm):

  • Khi hai tham số được chỉ định, tham số đầu tiên chỉ định điểm bắt đầu, trong khi tham số thứ hai chỉ định số lượng hàng cần trả về. (Lưu ý: Hàng đầu tiên là 0)
  • Trong khi đó, khi chỉ có một tham số được đưa ra, nó chỉ định số lượng hàng tối đa sẽ trả về từ đầu tập kết quả.

Ví dụ: Để lấy ba hàng đầu tiên trong CSDL, bạn có thể sử dụng truy vấn sau:

SELECT * FROM persons LIMIT 3;

Để lấy từ hàng 2 đến 4 (cả hàng 4), bạn có thể sử dụng truy vấn sau:

SELECT * FROM persons LIMIT 1, 3;

Bây giờ, chúng ta hãy tạo một truy vấn SQL bằng mệnh đề LIMIT trong câu lệnh SELECT, sau đó chúng ta sẽ thực hiện truy vấn này thông qua việc chuyển nó đến hàm mysqli_query() của PHP lấy một số bản ghi nhất định.

Hãy xem xét bảng person sau trong cơ sở dữ liệu demo:

Bảng person trong CSDL demo

Đoạn code PHP trong ví dụ sau sẽ chỉ hiển thị ba hàng từ bảng person:

Ví dụ 1: Sử dụng mệnh đề LIMIT với MySQLi hướng thủ tục

<?php
/* Cố gắng kết nối MySQL Servwer. Giả sử bạn đang chạy MySQL
server với thiết lập mặc định (user 'root' và không có mật khẩu) */
$link = mysqli_connect("localhost", "root", "", "demo");
 
// Kiểm tra kết nối
if($link === false){
    die("ERROR: Không thể kết nối. " . mysqli_connect_error());
}
 
// Cố gắng thực hiện truy vấn
$sql = "SELECT * FROM persons LIMIT 3";
if($result = mysqli_query($link, $sql)){
    if(mysqli_num_rows($result) > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";
                echo "<th>email</th>";
            echo "</tr>";
        while($row = mysqli_fetch_array($result)){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['first_name'] . "</td>";
                echo "<td>" . $row['last_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        // Giải phóng bộ nhớ của biến
        mysqli_free_result($result);
    } else{
        echo "Không có bản ghi nào được tìm thấy.";
    }
} else{
    echo "ERROR: Không thể thực thi $sql. " . mysqli_error($link);
}
 
// Đóng kết nối
mysqli_close($link);
?>

Ví dụ 2: Sử dụng mệnh đề LIMIT với MySQLi hướng đối tượng

<?php
/* Cố gắng kết nối MySQL Servwer. Giả sử bạn đang chạy MySQL
server với thiết lập mặc định (user 'root' và không có mật khẩu) */
$mysqli = new mysqli("localhost", "root", "", "demo");
 
// Kiểm tra kết nối
if($mysqli === false){
    die("ERROR: Không thể kết nối. " . $mysqli->connect_error);
}
 
// Cố gắng thực thi truy vấn
$sql = "SELECT * FROM persons LIMIT 3";
if($result = $mysqli->query($sql)){
    if($result->num_rows > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";
                echo "<th>email</th>";
            echo "</tr>";
        while($row = $result->fetch_array()){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['first_name'] . "</td>";
                echo "<td>" . $row['last_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        // Giải phóng bộ nhớ của biến
        $result->free();
    } else{
        echo "Không có bản ghi nào được tìm thấy.";
    }
} else{
    echo "ERROR: Không thể thực thi $sql. " . $mysqli->error;
}
 
// Đóng kết nối
$mysqli->close();
?>

Ví dụ 3: Sử dụng mệnh đề LIMIT với PDO

<?php
/* Cố gắng kết nối MySQL Servwer. Giả sử bạn đang chạy MySQL
server với thiết lập mặc định (user 'root' và không có mật khẩu) */
try{
    $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
    // Thiết lập chế độ PDO error thành Ngoại lệ
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
    die("ERROR: Không thể kết nối. " . $e->getMessage());
}
 
// Cố gắng thực thi truy vấn
try{
    $sql = "SELECT * FROM persons LIMIT 3";  
    $result = $pdo->query($sql);
    if($result->rowCount() > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";
                echo "<th>email</th>";
            echo "</tr>";
        while($row = $result->fetch()){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['first_name'] . "</td>";
                echo "<td>" . $row['last_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        // Giải phóng bộ nhớ của biến
        unset($result);
    } else{
        echo "Không có bản ghi nào được tìm thấy.";
    }
} catch(PDOException $e){
    die("ERROR: Không thể thực thi $sql. " . $e->getMessage());
}
 
// Đóng kết nối
unset($pdo);
?>

Sau khi giới hạn kết quả trả về thì chúng ta nhận được như sau:

Kết quả sau khi sử dụng mệnh đề LIMIT để giới hạn bản ghi trả về
Kết quả sau khi sử dụng mệnh đề LIMIT để giới hạn bản ghi trả về

Note: Nếu bạn để ý, trong một số ví dụ gần đây, mình chỉ cần thay đổi câu lệnh truy vấn SQL. Các câu lệnh khác thì giống nhau.

Lời kết

Như vậy là bạn đã biết cách giới hạn bản ghi trả về từ câu lệnh SELECT bằng mệnh đề LIMIT.

Sử dụng mệnh đề LIMIT trong MySQL cũng đơn giản thôi phải không?

Hãy chăm chỉ học tập và ghi nhớ cách làm nhé.

PHPDev

Mệnh đề WHERE | MySQL & PHP

Bạn sẽ được hướng dẫn tìm hiểu mệnh đề WHERE để chọn các bản ghi từ bảng cơ sở dữ liệu MySQL dựa trên các điều kiện cụ thể bằng PHP.

Trong bài hướng dẫn tự học PHP và MySQL này, bạn sẽ được hướng dẫn tìm hiểu mệnh đề WHERE để chọn các bản ghi từ bảng cơ sở dữ liệu MySQL dựa trên các điều kiện cụ thể bằng PHP.

Lọc bản ghi với mệnh đề WHERE

Mệnh đề WHERE có nghĩa là

WHERE được sử dụng để trích xuất những bản ghi đáp ứng một điều kiện cụ thể.

Mệnh đề WHERE trong MySQL và PHP
Mệnh đề WHERE trong MySQL và PHP

Cú pháp cơ bản của mệnh đề WHERE như sau:

SELECT column_name(s) FROM table_name WHERE column_name operator value

Bây giờ,

Chúng ta hãy tạo một truy vấn SQL bằng cách sử dụng mệnh đề WHERE trong câu lệnh SELECT, sau đó chúng ta sẽ thực hiện truy vấn này thông qua việc chuyển nó đến hàm mysqli_query() của PHP để lấy dữ liệu được lọc.

Chúng ta có một bảng person bên trong cơ sở dữ liệu demo có các bản ghi sau:

Bảng person trong CSDL demo

Mã PHP sau đây chọn tất cả các hàng từ bảng person trong đó first_name = ‘Triệu Tòn’:

1. Hướng dẫn sử dụng Mệnh đề WHERE với MySQLi hướng thủ tục

<?php
/* Cố gắng kết nối MySQL Servwer. Giả sử bạn đang chạy MySQL
server với thiết lập mặc định (user 'root' và không có mật khẩu) */
$link = mysqli_connect("localhost", "root", "", "demo");
 
// Kiểm tra kết nối
if($link === false){
    die("ERROR: Không thể kết nối. " . mysqli_connect_error());
}
 
// Cố gắng thực hiện truy vấn
$sql = "SELECT * FROM persons WHERE first_name='Triệu Tòn'";
if($result = mysqli_query($link, $sql)){
    if(mysqli_num_rows($result) > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";
                echo "<th>email</th>";
            echo "</tr>";
        while($row = mysqli_fetch_array($result)){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['first_name'] . "</td>";
                echo "<td>" . $row['last_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        // Giải phóng bộ nhớ của biến
        mysqli_free_result($result);
    } else{
        echo "Không có bản ghi nào được tìm thấy.";
    }
} else{
    echo "ERROR: Không thể thực thi $sql. " . mysqli_error($link);
}
 
// Đóng kết nối
mysqli_close($link);
?>

2. Hướng dẫn sử dụng Mệnh đề WHERE với MySQLi hướng đối tượng

<?php
/* Cố gắng kết nối MySQL Servwer. Giả sử bạn đang chạy MySQL
server với thiết lập mặc định (user 'root' và không có mật khẩu) */
$mysqli = new mysqli("localhost", "root", "", "demo");
 
// Kiểm tra kết nối
if($mysqli === false){
    die("ERROR: Không thể kết nối. " . $mysqli->connect_error);
}
 
// Cố gắng thực thi truy vấn
$sql = "SELECT * FROM persons WHERE first_name='Triệu Tòn'";
if($result = $mysqli->query($sql)){
    if($result->num_rows > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";
                echo "<th>email</th>";
            echo "</tr>";
        while($row = $result->fetch_array()){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['first_name'] . "</td>";
                echo "<td>" . $row['last_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        // Giải phóng bộ nhớ của biến
        $result->free();
    } else{
        echo "Không có bản ghi nào được tìm thấy.";
    }
} else{
    echo "ERROR: Không thể thực thi $sql. " . $mysqli->error;
}
 
// Đóng kết nối
$mysqli->close();
?>

3. Hướng dẫn sử dụng Mệnh đề WHERE với PDO

<?php
/* Cố gắng kết nối MySQL Servwer. Giả sử bạn đang chạy MySQL
server với thiết lập mặc định (user 'root' và không có mật khẩu) */
try{
    $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
    // Thiết lập chế độ PDO error thành Ngoại lệ
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
    die("ERROR: Không thể kết nối. " . $e->getMessage());
}
 
// Cố gắng thực thi truy vấn
try{
    $sql = "SELECT * FROM persons WHERE first_name='Triệu Tòn'";  
    $result = $pdo->query($sql);
    if($result->rowCount() > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";
                echo "<th>email</th>";
            echo "</tr>";
        while($row = $result->fetch()){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['first_name'] . "</td>";
                echo "<td>" . $row['last_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        // Giải phóng bộ nhớ của biến
        unset($result);
    } else{
        echo "Không có bản ghi nào được tìm thấy.";
    }
} catch(PDOException $e){
    die("ERROR: Không thể thực thi $sql. " . $e->getMessage());
}
 
// Đóng kết nối
unset($pdo);
?>

Sau khi sử dụng mệnh đề WHERE để lọc bản ghi với fisrt_name = ‘Triệu Tòn’, chúng ta nhận được kết quả như sau:

Bạn đã hiểu cách sử dụng mệnh đề WHERE chưa?

Mệnh đề WHERE trong MySQL được sử dụng để lọc bản ghi theo một điều kiện nào đó. Sau đó chúng ta có thể sử dụng kết quả lọc như thế nào tùy thích.

Trên đây bạn đã được hướng dẫn sử dụng mệnh đề WHERE để lọc bản ghi với 3 cách. Nếu có bất kỳ điều gì chưa hiểu, vui lòng để lại comment bạn nhé.!

PHPDev

Câu lệnh SELECT | MySQL & PHP

Trong hướng tự học PHP và MySQL này, bạn sẽ tìm hiểu cách sử dụng câu lệnh SELECT để chọn bản ghi từ bảng MySQL bằng PHP.

Trong hướng tự học PHP và MySQL này, bạn sẽ tìm hiểu cách sử dụng câu lệnh SELECT để chọn bản ghi từ bảng MySQL bằng PHP.

Hướng dẫn sử dụng câu lệnh SELECT để lấy dữ liệu từ bảng CSDL MySQL trong lập trình PHP

Chọn dữ liệu từ các bảng Cơ sở dữ liệu

Cho đến nay bạn đã học được cách tạo CSDLtạo bảng CSDL cũng như chèn dữ liệu trong MySQL.

Như vậy, bạn đã có dữ liệu sẵn sàng.

Bây giờ là lúc để lấy dữ liệu từ những gì đã chèn trong các bài học trước để sử dụng.

Câu lệnh SELECT trong SQL được sử dụng để chọn các bản ghi từ các bảng cơ sở dữ liệu. Cú pháp cơ bản của nó là như sau:

SELECT column1_name, column2_name, columnN_name FROM table_name;

Chúng ta hãy tạo một truy vấn SQL bằng cách sử dụng câu lệnh SELECT, sau đó chúng ta sẽ thực hiện truy vấn SQL này thông qua việc chuyển nó đến hàm mysqli_query() của PHP để lấy dữ liệu từ bảng.

Xem xét bảng cơ sở dữ liệu person của chúng ta có các hồ sơ sau đây:

Ví dụ về bảng MySQL đơn giản

Code PHP trong ví dụ sau đây chọn tất cả dữ liệu được lưu trữ trong bảng person (sử dụng ký tự dấu hoa thị (*) thay cho tên cột sẽ chọn tất cả dữ liệu trong bảng).

SELECT * FROM table_name;

1. Sử dụng lệnh SELECT để chọn dữ liệu từ bảng với MySQLi hướng thủ tục

<?php
/*Cố gắng kết nối máy chủ MySQL. Giả sử bạn đang chạy MySQL
Máy chủ có cài đặt mặc định (user là 'root' và không có mật khẩu)*/
$link = mysqli_connect("localhost", "root", "", "demo");
 
// Kểm tra kết nối
if($link === false){
    die("ERROR: Không thể kết nối. " . mysqli_connect_error());
}
 
// Cố gắng thực hiện câu lệnh SELECT
$sql = "SELECT * FROM persons";
if($result = mysqli_query($link, $sql)){
    if(mysqli_num_rows($result) > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";
                echo "<th>email</th>";
            echo "</tr>";
        while($row = mysqli_fetch_array($result)){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['first_name'] . "</td>";
                echo "<td>" . $row['last_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        // Giải phóng bộ nhớ của biến
        mysqli_free_result($result);
    } else{
        echo "Không có bản ghi nào được tìm thấy.";
    }
} else{
    echo "ERROR: Không thể thực thi câu lệnh $sql. " . mysqli_error($link);
}
 
// Đóng kết nối
mysqli_close($link);
?>

2. Sử dụng lệnh SELECT để chọn dữ liệu từ bảng với MySQLi hướng đối tượng

<?php
/*Cố gắng kết nối máy chủ MySQL. Giả sử bạn đang chạy MySQL
Máy chủ có cài đặt mặc định (user là 'root' và không có mật khẩu)*/
$mysqli = new mysqli("localhost", "root", "", "demo");
 
// Kiểm tra kết nối
if($mysqli === false){
    die("ERROR: Không thể kết nối. " . $mysqli->connect_error);
}
 
// Cố gắng thực hiện câu lệnh SELECT
$sql = "SELECT * FROM persons";
if($result = $mysqli->query($sql)){
    if($result->num_rows > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";
                echo "<th>email</th>";
            echo "</tr>";
        while($row = $result->fetch_array()){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['first_name'] . "</td>";
                echo "<td>" . $row['last_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        // Giải phóng bộ nhớ của biến
        $result->free();
    } else{
        echo "Không có bản ghi nào được tìm thấy.";
    }
} else{
    echo "ERROR: Không thể thực thi câu lệnh $sql. " . $mysqli->error;
}
 
// Đóng kết nối
$mysqli->close();
?>

3. Sử dụng lệnh SELECT để chọn dữ liệu từ bảng với PDO

<?php
/*Cố gắng kết nối máy chủ MySQL. Giả sử bạn đang chạy MySQL
Máy chủ có cài đặt mặc định (user là 'root' và không có mật khẩu)*/
try{
    $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
    // Thiết lập chế độ PDO error thành Ngoại lệ
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
    die("ERROR: Could not connect. " . $e->getMessage());
}
 
// Cố gắng thực hiện câu lệnh SELECT
try{
    $sql = "SELECT * FROM persons";   
    $result = $pdo->query($sql);
    if($result->rowCount() > 0){
        echo "<table>";
            echo "<tr>";
                echo "<th>id</th>";
                echo "<th>first_name</th>";
                echo "<th>last_name</th>";
                echo "<th>email</th>";
            echo "</tr>";
        while($row = $result->fetch()){
            echo "<tr>";
                echo "<td>" . $row['id'] . "</td>";
                echo "<td>" . $row['first_name'] . "</td>";
                echo "<td>" . $row['last_name'] . "</td>";
                echo "<td>" . $row['email'] . "</td>";
            echo "</tr>";
        }
        echo "</table>";
        // Giải phóng bộ nhớ của biến
        unset($result);
    } else{
        echo "Không có bản ghi nào được tìm thấy.";
    }
} catch(PDOException $e){
    die("ERROR: Không thể thực thi câu lệnh $sql. " . $e->getMessage());
}
 
// Đóng kết nối
unset($pdo);
?>

Giải thích code

Trong ví dụ trên, dữ liệu được trả về bởi hàm mysqli_query() được lưu trữ trong biến $result.

Mỗi lần hàm mysqli_fetch_array() được gọi, nó sẽ trả về hàng tiếp theo từ tập kết quả dưới dạng một mảng.

Vòng lặp while được sử dụng để lặp qua tất cả các hàng trong tập kết quả.

Cuối cùng, giá trị của từng trường có thể được truy cập từ hàng bằng cách chuyển chỉ mục trường hoặc tên trường cho biến $row như $row[‘id’] hoặc $row[0], $row[‘first_name’] hoặc $row[1], $row[‘last_name’] hoặc $row[2] và $row[’email’] hoặc $row[3].

Nếu bạn muốn sử dụng vòng lặp for, bạn có thể lấy giá trị bộ đếm vòng lặp hoặc số lượng hàng được truy vấn trả về bằng cách truyền biến $result cho hàm mysqli_num_rows().

Giá trị bộ đếm vòng lặp này xác định số lần vòng lặp sẽ chạy.

Bạn đã hiểu cách sử dụng câu lệnh SELECT để lấy dữ liệu trong MySQL chưa?

Câu lệnh SELECT là một câu lệnh phổ biến nhất khi bạn muốn thao tác với CSDL MySQL.

Hãy ghi nhớ cách sử dụng câu lệnh SELECT giống như là bảng cửu chương vậy nhé.

PHPDev

Chèn ID cuối cùng trong MySQL

3 cách lấy ID cuối cùng trong bảng CSDL MySQL để giúp cho cả người mới bắt đầu học lập trình PHP cũng có thể hiểu.

Trong bài hướng dẫn tự học lập trình PHP và MySQL này, bạn sẽ tìm hiểu cách lấy ID duy nhất của hàng được chèn cuối cùng từ bảng cơ sở dữ liệu MySQL bằng PHP.

Hướng dẫn cách lấy ID cuối cùng của bảng CSDL trong MySQL
Hướng dẫn cách lấy ID cuối cùng của bảng CSDL trong MySQL

Cách lấy ID của hàng được chèn cuối cùng

Trong bài hướng dẫn Insert trong MySQL, bạn đã học rằng MySQL tự động tạo một ID duy nhất cho cột AUTO_INCREMENT mỗi khi bạn chèn một bản ghi hoặc hàng mới vào bảng.

Tuy nhiên, có một số tình huống bạn cần lấy ID được tạo tự động đó để chèn nó vào bảng thứ hai.

Trong những tình huống này, bạn có thể sử dụng hàm mysqli_insert_id() của PHP để lấy ID được tạo gần đây nhất, như trong ví dụ bên dưới đây:

Trong ví dụ này, chúng ta sẽ sử dụng cùng một bảng mà chúng ta đã tạo trong bài Cách tạo bảng CSDL trong MySQL, có bốn cột id, first_name, last_nameemail, trong đó id là cột khóa chính (primary key) và được đánh dấu bằng AUTO_INCREMENT.

1. Hướng dẫn lấy ID cuối cùng trong CSDL MySQL với MySQLi hướng thủ tục

<?php
/* Cố gắng kết nối máy chủ MySQL. Giả sử bạn đang chạy MySQL
Máy chủ có cài đặt mặc định (người dùng 'root' không có mật khẩu) */
$link = mysqli_connect("localhost", "root", "", "demo");
 
// Kiểm tra kết nối
if($link === false){
    die("ERROR: Không thể kết nối. " . mysqli_connect_error());
}
 
// Cố gắng thực hiện câu lệnh INSERT
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('Ron', 'Weasley', 'ronweasley@mail.com')";
if(mysqli_query($link, $sql)){
    // Lấy ID đã chèn cuối cùng
    $last_id = mysqli_insert_id($link);
    echo "Chèn bản ghi thành công. ID đã chèn cuối cùng là: " . $last_id;
} else{
    echo "ERROR: Không thể thực thi câu lệnh $sql. " . mysqli_error($link);
}
 
// Đóng kết nối
mysqli_close($link);
?>

2. Hướng dẫn lấy ID cuối cùng trong CSDL MySQL với MySQLi hướng đối tượng

<?php
/* Cố gắng kết nối máy chủ MySQL. Giả sử bạn đang chạy MySQL
Máy chủ có cài đặt mặc định (người dùng 'root' không có mật khẩu) */
$link = mysqli_connect("localhost", "root", "", "demo");
 
// Kiểm tra kết nối
if($mysqli === false){
    die("ERROR: Không thể kết nối. " . $mysqli->connect_error);
}
 
// Cố gắng thực hiện câu lệnh INSERT
$sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('Ron', 'Weasley', 'ronweasley@mail.com')";
if($mysqli->query($sql) === true){
    // Lấy ID đã chèn cuối cùng
    $last_id = $mysqli->insert_id;
    echo "Chèn bản ghi thành công. ID đã chèn cuối cùng là: " . $last_id;
} else{
    echo "ERROR: Không thể thực thi câu lệnh $sql. " . $mysqli->error;
}
 
// Đóng kết nối
$mysqli->close();
?>

3. Hướng dẫn lấy ID cuối cùng trong CSDL MySQL với PDO

<?php
/* Cố gắng kết nối máy chủ MySQL. Giả sử bạn đang chạy MySQL
Máy chủ có cài đặt mặc định (người dùng 'root' không có mật khẩu) */
try{
    $pdo = new PDO("mysql:host=localhost;dbname=demo", "root", "");
    // Thiết lập chế độ PDO error thành ngoại lệ
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e){
    die("ERROR: Không thể kết nối. " . $e->getMessage());
}
 
// Cố gắng thực hiện câu lệnh INSERT
try{
    $sql = "INSERT INTO persons (first_name, last_name, email) VALUES ('Ron', 'Weasley', 'ronweasley@mail.com')";    
    $pdo->exec($sql);
    $last_id = $pdo->lastInsertId();
    echo "Chèn bản ghi thành công. ID đã chèn cuối cùng là: " . $last_id;
} catch(PDOException $e){
    die("ERROR: Không thể thực thi câu lệnh $sql. " . $e->getMessage());
}
 
// Đóng kết nối
unset($pdo);
?>

Bạn đã hiểu cách lấy ID cuối cùng trong MySQL chưa?

Mình hướng dẫn bạn cả 3 cách lấy ID cuối cùng trong bảng CSDL MySQL để giúp cho cả người mới bắt đầu có thể hiểu.

Hãy luyện tập vào ghi nhớ 3 cách lấy ID cuối cùng này nhé. Bạn sẽ sử dụng đến rất nhiều đấy.

PHPDev