Theo Stefan Esser, "mysql_real_escape_string()
[là] không an toàn khi SET NAMES
được sử dụng. "
Lời giải thích của anh ấy, từ blog của anh ấy :
SET NAMES thường được sử dụng để chuyển mã hóa từ những gì mặc định sang những gì ứng dụng cần. Điều này được thực hiện theo cách mà
mysql_real_escape_string
không biết về điều này. Điều này có nghĩa là nếu bạn chuyển sang một số mã hóa nhiều byte cho phép dấu gạch chéo ngược là byte thứ 2, thứ 3, thứ 4… thì bạn sẽ gặp rắc rối, vìmysql_real_escape_string
không thoát chính xác. UTF-8 an toàn…Cách an toàn để thay đổi mã hóa là
mysql_set_charset
, nhưng điều đó chỉ có sẵn trong các phiên bản PHP mới
Tuy nhiên, anh ấy đề cập rằng UTF-8 là an toàn.