Jak wyjaśniono tutaj:Czy mysql_real_escape_string() W PEŁNI chroni przed wstrzyknięciem SQL?
Na podstawie Twojego fragmentu kodu połączyłeś bazę danych dwukrotnie.
$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);
I nie podałeś identyfikatora łącza do bazy danych dla :
$email= mysql_real_escape_string($_POST['email']);
$name= mysql_real_escape_string($_POST['name']);
$sex= mysql_real_escape_string($_POST['sex']);
W związku z tym mysql_set_charset nie ma wpływu na rzeczywisty kod ucieczki dostarczony$_POST
dla znaków wielobajtowych.
Sugestia
- usuń drugi
mysql_connect($db_host,$username,$password);
- wyraźnie dodaj
$db_con
podczas wykonywaniamysql_real_escape_string