Cập nhật dữ liệu trong MySQL bằng PHP sử dụng Prepared Statements để tránh SQL Injection
Hướng dẫn cách sử dụng Prepared Statements trong PHP để cập nhật dữ liệu trong MySQL một cách an toàn và hiệu quả. Mã PHP này giúp tránh các lỗ hổng SQL Injection khi thao tác với cơ sở dữ liệu.
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "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 không thành công: " . $conn->connect_error);
}
// Chuẩn bị câu lệnh SQL với placeholders
$sql = "UPDATE table_name SET column1 = ?, column2 = ? WHERE id = ?";
// Tạo Prepared Statement
$stmt = $conn->prepare($sql);
if ($stmt === false) {
die("Chuẩn bị câu lệnh không thành công: " . $conn->error);
}
// Liên kết tham số với câu lệnh
$stmt->bind_param("ssi", $value1, $value2, $id);
// Gán giá trị cho tham số
$value1 = "New Value 1";
$value2 = "New Value 2";
$id = 1;
// Thực thi câu lệnh
if ($stmt->execute()) {
echo "Cập nhật dữ liệu thành công!";
} else {
echo "Lỗi khi cập nhật dữ liệu: " . $stmt->error;
}
// Đóng kết nối
$stmt->close();
$conn->close();
?>
Giải thích chi tiết:
-
Tạo kết nối:
new mysqli($servername, $username, $password, $dbname)
: Tạo kết nối đến cơ sở dữ liệu MySQL.
-
Kiểm tra kết nối:
if ($conn->connect_error)
: Kiểm tra xem có lỗi kết nối không.
-
Chuẩn bị câu lệnh SQL với placeholders:
UPDATE table_name SET column1 = ?, column2 = ? WHERE id = ?
: Sử dụng dấu hỏi (?
) làm placeholders cho các tham số.
-
Tạo Prepared Statement:
$conn->prepare($sql)
: Tạo một đối tượng Prepared Statement.
-
Liên kết tham số với câu lệnh:
$stmt->bind_param("ssi", $value1, $value2, $id)
: Liên kết các tham số với câu lệnh SQL. Các ký tự"ssi"
chỉ định loại dữ liệu của các tham số (s
cho chuỗi,i
cho số nguyên).
-
Gán giá trị cho tham số:
$value1 = "New Value 1";
,$value2 = "New Value 2";
,$id = 1;
: Gán giá trị cụ thể cho các tham số.
-
Thực thi câu lệnh:
if ($stmt->execute())
: Thực thi câu lệnh và kiểm tra kết quả.
-
Đóng kết nối:
$stmt->close();
,$conn->close();
: Đóng Prepared Statement và kết nối cơ sở dữ liệu.
Phiên bản PHP:
Mã này có thể chạy trên các phiên bản PHP từ 5.0 trở lên và yêu cầu extension MySQLi.