×

Hướng dẫn viết class CRUD với PDO trong PHP

Việc xây dựng ứng dụng web ngày nay trở nên đơn giản hơn rất nhiều với sự hỗ trợ của các công nghệ như PHP và PDO (PHP Data Objects). Hệ thống CRUD (Create, Read, Update, Delete) là một trong những phần cốt lõi trong bất kỳ ứng dụng nào, cho phép bạn tương tác với cơ sở dữ liệu một cách hiệu quả và an toàn. Trong bài viết này, chúng ta sẽ tìm hiểu cách viết một class CRUD bằng cách sử dụng PDO trong PHP - một giải pháp an toàn và hiệu quả cho quản lý dữ liệu trong ứng dụng của bạn.

Tại sao chọn PDO?

PDO là một extension của PHP cho phép truy cập vào nhiều loại cơ sở dữ liệu khác nhau một cách nhất quán. Nhờ vào tính năng này, bạn có thể thay đổi hệ quản trị cơ sở dữ liệu mà không cần phải viết lại mã truy vấn SQL. Điều này giúp dễ dàng bảo trì và mở rộng ứng dụng của bạn sau này.

Cài đặt môi trường

Trước khi bắt đầu, bạn cần một môi trường phát triển cho PHP. Bạn có thể sử dụng các phần mềm như XAMPP, WAMP hoặc MAMP để có thể chạy PHP và MySQL. Đảm bảo rằng bạn đã cài đặt thành công và tạo một cơ sở dữ liệu cho ứng dụng của mình.

Tạo cơ sở dữ liệu

Để dễ dàng hơn cho việc thực hành, hãy tạo một cơ sở dữ liệu mẫu. Bạn có thể sử dụng phpMyAdmin hoặc bất kỳ công cụ quản lý cơ sở dữ liệu nào khác để thực hiện việc này.

CREATE DATABASE crud_example;

USE crud_example;

CREATE TABLE users (
    id INT(11) AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL
);

Tạo class Database

Đầu tiên, chúng ta sẽ tạo một class Database để xử lý kết nối đến cơ sở dữ liệu.

class Database {
    private $host = "localhost";
    private $db_name = "crud_example";
    private $username = "root";
    private $password = "";
    public $conn;

    public function getConnection() {
        $this->conn = null;

        try {
            $this->conn = new PDO("mysql:host=". $this->host .";dbname=". $this->db_name, $this->username, $this->password);
            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch(PDOException $exception) {
            echo "Connection error: " . $exception->getMessage();
        }

        return $this->conn;
    }
}

Class này sẽ tạo ra một kết nối đến cơ sở dữ liệu MySQL bằng PDO. Bạn cần điều chỉnh giá trị của $username$password cho phù hợp với môi trường của mình.

Tạo class CRUD

Tiếp theo, chúng ta sẽ xây dựng class User với các phương thức CRUD.

class User {
    private $conn;
    private $table_name = "users";

    public function __construct($db) {
        $this->conn = $db;
    }

    public function create($username, $email) {
        $query = "INSERT INTO " . $this->table_name . " (username, email) VALUES (:username, :email)";

        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(':username', $username);
        $stmt->bindParam(':email', $email);

        if ($stmt->execute()) {
            return true;
        }
        return false;
    }

    public function read() {
        $query = "SELECT id, username, email FROM " . $this->table_name;
        $stmt = $this->conn->prepare($query);
        $stmt->execute();
        return $stmt;
    }

    public function update($id, $username, $email) {
        $query = "UPDATE " . $this->table_name . " SET username = :username, email = :email WHERE id = :id";

        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(':id', $id);
        $stmt->bindParam(':username', $username);
        $stmt->bindParam(':email', $email);

        if ($stmt->execute()) {
            return true;
        }
        return false;
    }

    public function delete($id) {
        $query = "DELETE FROM " . $this->table_name . " WHERE id = :id";

        $stmt = $this->conn->prepare($query);
        $stmt->bindParam(':id', $id);

        if ($stmt->execute()) {
            return true;
        }
        return false;
    }
}

Phân tích code trong class User

  1. create: Phương thức này sẽ thêm một người dùng mới vào bảng users.
  2. read: Phương thức này sẽ truy vấn tất cả người dùng từ bảng và trả về kết quả dưới dạng một đối tượng statement.
  3. update: Phương thức này cập nhật thông tin người dùng dựa trên ID.
  4. delete: Phương thức này sẽ xóa người dùng khỏi bảng dựa trên ID.

Sử dụng class CRUD

Giờ đây chúng ta có thể sử dụng class DatabaseUser để thực hiện các thao tác CRUD.

require_once 'Database.php'; // Đường dẫn đúng tới file chứa class Database
require_once 'User.php'; // Đường dẫn đúng tới file chứa class User

$database = new Database();
$db = $database->getConnection();

$user = new User($db);

// Tạo người dùng mới
if($user->create("john_doe", "john@example.com")) {
    echo "User was created.";
}

// Đọc tất cả người dùng
$stmt = $user->read();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    extract($row);
    echo "ID: {$id}, Username: {$username}, Email: {$email}" . PHP_EOL;
}

// Cập nhật thông tin người dùng
if($user->update(1, "john_doe_updated", "john_updated@example.com")) {
    echo "User was updated.";
}

// Xóa người dùng
if($user->delete(1)) {
    echo "User was deleted.";
}

Hiệu suất và Bảo mật

  1. Prepared Statements: PDO hỗ trợ prepared statements, giúp bảo vệ ứng dụng khỏi SQL Injection.
  2. Error Handling: PDO cho phép bạn dễ dàng xử lý lỗi thông qua các chế độ lỗi.

Kết luận

Với những kiến thức trong bài viết này, bạn đã có thể tạo ra một class CRUD đơn giản bằng PDO trong PHP. Đây là một phương pháp hiệu quả và an toàn để tương tác với cơ sở dữ liệu. Từ đây, bạn có thể mở rộng và cải thiện dự án của mình với các tính năng khác như xác thực người dùng, phân trang, và nhiều hơn nữa.

Chúc bạn lập trình thành công và tạo ra những ứng dụng tuyệt vời!

Comments