Chương 11: Làm Việc Với Cơ Sở Dữ Liệu MySQL Trong PHP

Nội dung học:

1. Tổng quan về MySQL và PHP

  • MySQL là hệ quản trị cơ sở dữ liệu phổ biến, được sử dụng rộng rãi với PHP.
  • PHP cung cấp các cách để kết nối và làm việc với MySQL, bao gồm:
    • MySQLi (Improved MySQL): Hỗ trợ hướng thủ tục và hướng đối tượng.
    • PDO (PHP Data Objects): Hỗ trợ nhiều loại cơ sở dữ liệu, bao gồm MySQL.

2. Kết nối PHP với MySQL

  • Sử dụng MySQLi (Hướng thủ tục): $servername = "localhost"; $username = "root"; $password = ""; $dbname = "hoc_php"; // Tạo kết nối $conn = mysqli_connect($servername, $username, $password, $dbname); // Kiểm tra kết nối if (!$conn) { die("Kết nối thất bại: " . mysqli_connect_error()); } echo "Kết nối thành công!";
  • Sử dụng PDO: $dsn = "mysql:host=localhost;dbname=hoc_php"; $username = "root"; $password = ""; try { $conn = new PDO($dsn, $username, $password); $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Kết nối thành công!"; } catch (PDOException $e) { echo "Kết nối thất bại: " . $e->getMessage(); }

3. Thực hiện các truy vấn cơ bản

  • Chạy truy vấn với MySQLi: $sql = "SELECT * FROM users"; $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) { while ($row = mysqli_fetch_assoc($result)) { echo "ID: " . $row["id"] . " - Tên: " . $row["ten"] . "<br>"; } } else { echo "Không có kết quả."; }
  • Chạy truy vấn với PDO: $sql = "SELECT * FROM users"; $stmt = $conn->query($sql); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo "ID: " . $row["id"] . " - Tên: " . $row["ten"] . "<br>"; }

4. Thêm, sửa, xóa dữ liệu

  • Thêm dữ liệu: $sql = "INSERT INTO users (ten, email) VALUES ('Nguyen Van A', 'nva@example.com')"; if (mysqli_query($conn, $sql)) { echo "Thêm thành công!"; } else { echo "Lỗi: " . mysqli_error($conn); }
  • Sửa dữ liệu: $sql = "UPDATE users SET email = 'moi@example.com' WHERE id = 1"; if (mysqli_query($conn, $sql)) { echo "Cập nhật thành công!"; } else { echo "Lỗi: " . mysqli_error($conn); }
  • Xóa dữ liệu: $sql = "DELETE FROM users WHERE id = 1"; if (mysqli_query($conn, $sql)) { echo "Xóa thành công!"; } else { echo "Lỗi: " . mysqli_error($conn); }

5. Bảo mật với SQL Injection

  • Sử dụng câu truy vấn có tham số để tránh SQL Injection.
  • Ví dụ với PDO: $sql = "SELECT * FROM users WHERE email = :email"; $stmt = $conn->prepare($sql); $stmt->bindParam(':email', $email); $email = 'nva@example.com'; $stmt->execute(); while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo "ID: " . $row["id"] . " - Tên: " . $row["ten"] . "<br>"; }

6. Đóng kết nối

  • Với MySQLi: mysqli_close($conn);
  • Với PDO: $conn = null;

Bài tập thực hành:

  1. Bài tập 1: Tạo kết nối tới cơ sở dữ liệu MySQL và hiển thị danh sách người dùng từ bảng users.
  2. Bài tập 2: Viết chương trình thêm mới một người dùng vào bảng users qua form HTML.
  3. Bài tập 3: Xây dựng chương trình cập nhật thông tin người dùng với ID cụ thể.
  4. Bài tập 4: Tạo chức năng xóa một người dùng từ bảng users thông qua form HTML.
  5. Bài tập 5: Xây dựng chức năng tìm kiếm người dùng theo email với truy vấn có tham số (Prepared Statement).

Lưu ý quan trọng:

  • Luôn kiểm tra và làm sạch dữ liệu đầu vào trước khi chạy truy vấn.
  • Sử dụng Prepared Statement để bảo mật ứng dụng khỏi SQL Injection.
  • Đảm bảo đóng kết nối sau khi sử dụng để tiết kiệm tài nguyên.

Viết một bình luận