Trong PHP, bạn có thể sử dụng truy vấn SQL DELETE để xóa dữ liệu từ bảng MySQL. Mệnh đề DELETE cho phép bạn xóa một hoặc nhiều bản ghi trong bảng dựa trên điều kiện cụ thể, và điều này rất hữu ích khi bạn muốn quản lý dữ liệu một cách hiệu quả. PHP hỗ trợ hai cách để thực hiện truy vấn này: mysqli và PDO.
Bài viết này sẽ hướng dẫn bạn cách sử dụng DELETE trong PHP MySQL bằng cả hai phương pháp mysqli và PDO.
1. Cú pháp của câu lệnh DELETE
DELETE FROM table_name WHERE condition;table_name: Tên của bảng bạn muốn xóa dữ liệu.WHERE condition: Điều kiện để chỉ định bản ghi nào sẽ bị xóa. Nếu không có mệnh đềWHERE, tất cả các bản ghi trong bảng sẽ bị xóa.
2. Sử dụng mysqli để xóa dữ liệu
a) Hướng đối tượng (OOP)
Dưới đây là cách sử dụng mysqli theo mô hình hướng đối tượng để xóa dữ liệu từ bảng MySQL.
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";
// Tạo kết nối
$conn = new mysqli($servername, $username, $password, $dbname);
// Kiểm tra kết nối
if ($conn->connect_error) {
die("Kết nối thất bại: " . $conn->connect_error);
}
// Câu lệnh SQL để xóa dữ liệu
$sql = "DELETE FROM Users WHERE id = 5";
if ($conn->query($sql) === TRUE) {
echo "Bản ghi đã được xóa thành công!";
} else {
echo "Lỗi khi xóa bản ghi: " . $conn->error;
}
// Đóng kết nối
$conn->close();
?>Giải thích:
DELETE FROM Users WHERE id = 5: Câu lệnh SQL này xóa bản ghi cóid = 5trong bảngUsers.$conn->query($sql): Thực hiện câu lệnh SQL. Nếu xóa thành công, thông báo "Bản ghi đã được xóa thành công!" sẽ xuất hiện. Nếu không, lỗi sẽ được hiển thị.
b) Hướng thủ tục
Cách tiếp cận theo hướng thủ tục cũng tương tự như hướng đối tượng, nhưng sử dụng các hàm thủ tục như mysqli_query().
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";
// 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());
}
// Câu lệnh SQL để xóa dữ liệu
$sql = "DELETE FROM Users WHERE id = 5";
if (mysqli_query($conn, $sql)) {
echo "Bản ghi đã được xóa thành công!";
} else {
echo "Lỗi khi xóa bản ghi: " . mysqli_error($conn);
}
// Đóng kết nối
mysqli_close($conn);
?>Giải thích:
mysqli_query($conn, $sql): Thực hiện câu lệnh SQLDELETE. Nếu thành công, thông báo sẽ xuất hiện, nếu không, lỗi sẽ được hiển thị.
3. Sử dụng PDO để xóa dữ liệu
PDO cung cấp một cách tiếp cận linh hoạt và mạnh mẽ hơn để kết nối và thao tác với nhiều cơ sở dữ liệu, bao gồm MySQL.
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";
try {
// Tạo kết nối PDO
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Câu lệnh SQL để xóa dữ liệu
$sql = "DELETE FROM Users WHERE id = 5";
// Thực hiện câu lệnh
$conn->exec($sql);
echo "Bản ghi đã được xóa thành công!";
} catch(PDOException $e) {
echo "Lỗi khi xóa bản ghi: " . $e->getMessage();
}
// Đóng kết nối
$conn = null;
?>Giải thích:
exec(): Được sử dụng trong PDO để thực hiện các câu lệnh SQL không trả về kết quả, chẳng hạn nhưDELETE.- Nếu câu lệnh xóa thành công, thông báo sẽ xuất hiện, nếu không, lỗi sẽ được hiển thị thông qua khối
try-catch.
4. Sử dụng DELETE với Prepared Statements
Sử dụng Prepared Statements giúp bảo vệ ứng dụng của bạn khỏi các cuộc tấn công SQL Injection khi bạn thao tác với dữ liệu từ người dùng. Prepared Statements tách riêng câu lệnh SQL và dữ liệu, giúp quá trình xử lý an toàn hơn.
a) Sử dụng Prepared Statements với mysqli
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";
// Tạo kết nối
$conn = new mysqli($servername, $username, $password, $dbname);
// Kiểm tra kết nối
if ($conn->connect_error) {
die("Kết nối thất bại: " . $conn->connect_error);
}
// Chuẩn bị câu lệnh SQL
$stmt = $conn->prepare("DELETE FROM Users WHERE id = ?");
$stmt->bind_param("i", $id);
// Gán giá trị và thực thi câu lệnh
$id = 5;
$stmt->execute();
echo "Bản ghi đã được xóa thành công!";
// Đóng câu lệnh và kết nối
$stmt->close();
$conn->close();
?>Giải thích:
prepare(): Chuẩn bị câu lệnh SQL với tham số (?).bind_param(): Liên kết biến$idvới tham số trong câu lệnh SQL.execute(): Thực thi câu lệnh để xóa bản ghi.
b) Sử dụng Prepared Statements với PDO
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";
try {
// Tạo kết nối PDO
$conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Chuẩn bị câu lệnh SQL
$stmt = $conn->prepare("DELETE FROM Users WHERE id = :id");
// Liên kết tham số và thực thi câu lệnh
$stmt->bindParam(':id', $id);
$id = 5;
$stmt->execute();
echo "Bản ghi đã được xóa thành công!";
} catch(PDOException $e) {
echo "Lỗi khi xóa bản ghi: " . $e->getMessage();
}
// Đóng kết nối
$conn = null;
?>Giải thích:
prepare(): Chuẩn bị câu lệnh SQL với tham số (:id).bindParam(): Liên kết biến$idvới tham số:idtrong câu lệnh SQL.execute(): Thực thi câu lệnh đã chuẩn bị để xóa bản ghi cóid = 5.
5. Xóa tất cả các bản ghi trong bảng
Nếu bạn muốn xóa tất cả các bản ghi trong bảng, bạn có thể không sử dụng mệnh đề WHERE. Tuy nhiên, hãy cẩn thận khi sử dụng câu lệnh này vì nó sẽ xóa toàn bộ dữ liệu trong bảng.
$sql = "DELETE FROM Users";Câu lệnh này sẽ xóa toàn bộ các bản ghi trong bảng Users, nhưng không xóa cấu trúc của bảng. Nếu bạn muốn xóa cả bảng, bạn có thể sử dụng câu lệnh DROP TABLE.
6. Kết luận
Câu lệnh DELETE trong MySQL là một công cụ mạnh mẽ để xóa dữ liệu từ cơ sở dữ liệu. PHP cung cấp hai phương pháp chính để thực hiện truy vấn DELETE: mysqli và PDO. Bạn có thể sử dụng mệnh đề WHERE để chỉ định các bản ghi cần xóa, và việc sử dụng Prepared Statements giúp bảo vệ ứng dụng khỏi các cuộc tấn công SQL Injection.
mysqli: Hỗ trợ truy vấnDELETEtheo cả hai mô hình hướng đối tượng và hướng thủ tục.- PDO: Cung cấp một API hướng đối tượng mạnh mẽ và linh hoạt, hỗ trợ nhiều hệ quản trị cơ sở dữ liệu khác nhau.
Sử dụng câu lệnh DELETE cẩn thận, đặc biệt khi bạn xóa nhiều bản ghi hoặc toàn bộ dữ liệu trong bảng, để tránh mất mát dữ liệu không mong muốn.









