- Một là: dữ liệu đó có chứa các kí tự đặc biệt (ví dụ như dấu ‘ , ” , /, …) làm cho câu query của chúng ta bị lỗi cú pháp.
Ví dụ:
$bien = ‘Cái gì” đây ta’;
mysql_query(“select * from news where title=’$bien’ “);
==> Rõ ràng trong $bien có chứa dấu “, nên khi đưa vào câu query sẽ làm cho câu query bị lỗi cú pháp.
Do đó trong trường hợp này, ta cần phải có hàm để xử lý các biến trước khi đưa vào câu query. Và ứng cử viên sáng giá hiện giờ là: addslashes, mysql_real_escape_string
+ Phân biệt addslashes, mysql_real_escape_string:
* Thông thường các hệ quản trị cơ sở dữ liệu (HQTCSDL) đều có hàm xử lý kí tự đặc biệt, nên php chỉ cần chuyển qua cho HQTCSDL
Đối với Mysql thì khi ta gọi hàm mysql_real_escape_string thì php sẽ chuyển xuống cho mysql xử lý (do đó trước khi dùng hàm này, phải gọi hàm mysql_connect)
Đối với PostgreSql thì khi ta gọi hàm pg_escape_string thì php sẽ chuyển xuống cho PostgreSql xử lý
* Đối với các HQTCSDL không có hàm xử lý các kí tự đặc biệt thì ta sẽ dùng chính php để xử lý, thông qua hàm addslashes
- Hai là: dữ liệu đó không làm ảnh hưởng đến cú pháp của câu query, được thêm vào bình thường, nhưng khi hiển thị lên, nó làm cho tài liều html của chúng ta bị lỗi cú pháp.
Ví dụ:
$tieude = ‘Hướng dẫn cách sử dụng thẻ div’;
$noidung = ‘Thẻ div viết đầy đủ là
mysql_query(“insert into news(title, body) values (‘$tieude’, ‘$noidung’)”);
==> Bạn hãy quan sát $noidung, nó có chứa
Và ứng cử viên được đề cử cho trường hợp này là hàm htmpspecialchas. Hàm này sẽ thay thế dấu < thành < và dấu > thành > . Khi đó về mặt nội dung sẽ là:
$noidung = ‘Thẻ div viết đầy đủ là
Nhưng khi show lên website thì: ‘Thẻ div viết đầy đủ là