Hàm mysqli_real_escape_string()
là một hàm quan trọng trong PHP được sử dụng để bảo vệ các truy vấn SQL khỏi các cuộc tấn công injection SQL. Hàm này giúp tránh được các ký tự đặc biệt có thể làm suy đoán và thực hiện các thao tác không mong muốn trên cơ sở dữ liệu nhờ vào khả năng xử lý dữ liệu người dùng trước khi chúng được thêm vào các truy vấn SQL. Hãy cùng Vietnix tìm hiểu thêm về hàm mysqli_real_escape_string()
trong PHP qua bài viết sau đây.
Hàm mysqli_real_escape_string() trong PHP là gì?
Hàm mysqli_real_escape_string()
là một hàm tích hợp sẵn trong PHP, được sử dụng để thoát tất cả các ký tự đặc biệt đã sử dụng trong truy vấn SQL. Hàm này được sử dụng trước khi chèn một chuỗi vào cơ sở dữ liệu, vì nó loại bỏ mọi ký tự đặc biệt có thể ảnh hưởng đến hoạt động truy vấn. Tuy nhiên, bạn cũng cần lưu ý rằng việc sử dụng mysqli_real_escape_string()
không phải là biện pháp an toàn tuyệt đối và không nên thay thế cho các biện pháp bảo mật khác như sử dụng câu lệnh thực thi tham số hoặc PDO để tránh injection SQL.
Khi bạn nhận dữ liệu từ người dùng thông qua các biểu mẫu web hoặc các nguồn khác, việc sử dụng hàm mysqli_real_escape_string()
trở nên quan trọng để đảm bảo rằng dữ liệu đó không thể làm hỏng cú pháp của truy vấn SQL. Hàm này sẽ tự động thêm các ký tự thoát (“\”) vào trước các ký tự đặc biệt như nháy đơn (‘), nháy kép (“), dấu gạch chéo ngược () và nhiều ký tự khác.
Khi sử dụng các chuỗi đơn giản, có khả năng các ký tự đặc biệt như dấu gạch chéo ngược và dấu nháy đơn được bao gồm trong chúng (đặc biệt khi chúng nhận dữ liệu trực tiếp từ biểu mẫu nhập dữ liệu đó). Chúng được coi là một phần của chuỗi truy vấn và cản trở hoạt động bình thường của nó.
Mọi người cũng đọc:
Ví dụ về hàm mysqli_real_escape_string() trong PHP
<?php
$connection = mysqli_connect(
"localhost", "root", "", "Persons");
// Check connection
if (mysqli_connect_errno()) {
echo "Database connection failed.";
}
$firstname = "Robert'O";
$lastname = "O'Connell";
$sql="INSERT INTO Persons (FirstName, LastName)
VALUES ('$firstname', '$lastname')";
if (mysqli_query($connection, $sql)) {
// Print the number of rows inserted in
// the table, if insertion is successful
printf("%d row inserted.\n",
$mysqli->affected_rows);
}
else {
// Query fails because the apostrophe in
// the string interferes with the query
printf("An error occurred!");
}
?>
Trong đoạn mã trên, truy vấn không thành công vì dấu nháy đơn được coi là một phần của truy vấn khi nó được thực thi bằng mysqli_query()
. Giải pháp là bạn sử dụng mysqli_real_escape_string()
trước khi sử dụng chuỗi trong truy vấn.
<?php
$connection = mysqli_connect(
"localhost", "root", "", "Persons");
// Check connection
if (mysqli_connect_errno()) {
echo "Database connection failed.";
}
$firstname = "Robert'O";
$lastname = "O'Connell";
// Remove the special characters from the
// string using mysqli_real_escape_string
$lastname_escape = mysqli_real_escape_string(
$connection, $lastname);
$firstname_escape = mysqli_real_escape_string(
$connection, $firstname);
$sql="INSERT INTO Persons (FirstName, LastName)
VALUES ('$firstname_escape', '$lastname_escape')";
if (mysqli_query($connection, $sql)) {
// Print the number of rows inserted in
// the table, if insertion is successful
printf("%d row inserted.\n", $mysqli->affected_rows);
}
?>
Output như sau:
1 row inserted.
Lời kết
Vietnix hy vọng nội dung bài viết trên đã giúp bạn hiểu rõ hơn về hàm mysqli_real_escape_string()
trong PHP. Ngoài ra, bạn cũng có thể tham khảo thêm các bài viết khác tại vietnix.vn để hiểu hơn về lập trình, chúc bạn thành công!