Điểm đầu tiên:Nếu bạn gặp lỗi từ mysql_real_escape_string()
, đó là vì bạn đang gọi hàm trước khi kết nối với cơ sở dữ liệu.
Có vẻ như bạn kết nối với cơ sở dữ liệu ngay trước khi bạn chạy một truy vấn. Vì vậy, bất cứ điều gì bạn làm trước khi gọi mm_mysqlquery()
của mình chức năng sẽ không có kết nối.
mysql_real_escape_string()
hàm cần một kết nối trực tiếp đến cơ sở dữ liệu, vì vậy nó có thể thực hiện đúng kiểu thoát đối với bộ ký tự của kết nối. Vì vậy, bạn cần kết nối trước bạn đang trốn thoát.
Tốt hơn hết là bạn nên làm điều đó, bởi vì nếu bạn thực hiện nhiều truy vấn trong quá trình thực hiện một yêu cầu PHP, thì việc kết nối một lần sẽ ít tốn kém hơn và sử dụng cùng một kết nối cho tất cả các truy vấn của bạn.
Thứ hai, vui lòng không đề xuất sử dụng addslashes()
- nó không hoạt động giống như mysql_real_escape_string()
. Cả hai không thể thay thế cho nhau. Bạn nên có thói quen sử dụng mysql_real_escape_string()
.
Thứ ba, sani()
của bạn hàm cho thấy một quan niệm sai lầm phổ biến.
function sani($string){
$string = strip_tags($string);
$string = htmlspecialchars($string);
$string = trim(rtrim(ltrim($string)));
$string = mysql_real_escape_string($string);
return $string;
}
Quan niệm sai lầm phổ biến là bạn cần tất cả các hàm này để tạo một chuỗi an toàn trong một câu lệnh SQL. Bạn không. Chỉ mysql_real_escape_string()
là cần thiết. Tất cả các hàm khác trong ví dụ này không có tác dụng gì để bảo vệ khỏi việc đưa vào SQL.
Các hàm đó hữu ích nếu bạn xuất một chuỗi trong bản trình bày HTML và bạn muốn giảm nguy cơ bị tấn công XSS, nhưng sau đó mysql_real_escape_string()
không liên quan.
Sử dụng từng loại phương pháp khử trùng trong ngữ cảnh thích hợp của nó.