Както обяснете тук:Защита ли mysql_real_escape_string() НАПЪЛНО срещу SQL инжектиране?
Въз основа на вашия кодов фрагмент сте свързали базата данни два пъти.
$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);
И не сте предоставили идентификатора на връзката към базата данни за :
$email= mysql_real_escape_string($_POST['email']);
$name= mysql_real_escape_string($_POST['name']);
$sex= mysql_real_escape_string($_POST['sex']);
Следователно mysql_set_charset няма ефект върху предоставеното реално escape$_POST
за многобайтови символи.
Предложение
- премахнете втория
mysql_connect($db_host,$username,$password);
- добавете изрично
$db_con
когато правитеmysql_real_escape_string