Như được giải thích ở đây: mysql_real_escape_string () CÓ bảo vệ HOÀN TOÀN khỏi việc chèn SQL không?
Dựa trên đoạn mã của bạn, bạn đã kết nối cơ sở dữ liệu hai lần.
$db_con=mysql_connect($db_host,$username,$password);
$connection_string=mysql_select_db($db_name);
mysql_connect($db_host,$username,$password);
mysql_set_charset('utf8',$db_con);
Và bạn đã không cung cấp mã định danh liên kết cơ sở dữ liệu cho:
$email= mysql_real_escape_string($_POST['email']);
$name= mysql_real_escape_string($_POST['name']);
$sex= mysql_real_escape_string($_POST['sex']);
Do đó, mysql_set_charset không ảnh hưởng đến lối thoát thực được cung cấp $_POST
cho các ký tự nhiều byte.
Đề xuất
- xóa
mysql_connect($db_host,$username,$password);
- thêm
$db_con
một cách rõ ràng khi thực hiệnmysql_real_escape_string