mysql_real_escape_string
Como explicado aqui:O mysql_real_escape_string() protege TOTALMENTE contra injeção de SQL?
Com base no seu trecho de código, você conectou o banco de dados duas vezes.
$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);
E você não forneceu o identificador de link do banco de dados para:
$email= mysql_real_escape_string($_POST['email']);
$name= mysql_real_escape_string($_POST['name']);
$sex= mysql_real_escape_string($_POST['sex']);
Portanto, mysql_set_charset não tem efeito para escape real fornecido
$_POST
para caracteres de vários bytes. Sugestão
- remova o segundo
mysql_connect($db_host,$username,$password);
- adicionar explicitamente
$db_con
ao fazermysql_real_escape_string