Comme expliqué ici :Mysql_real_escape_string() protège-t-il COMPLÈTEMENT contre l'injection SQL ?
D'après votre extrait de code, vous avez connecté la base de données deux fois.
$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);
Et vous n'avez pas fourni l'identifiant du lien de la base de données pour :
$email= mysql_real_escape_string($_POST['email']);
$name= mysql_real_escape_string($_POST['name']);
$sex= mysql_real_escape_string($_POST['sex']);
Par conséquent, mysql_set_charset n'a aucun effet sur l'échappement réel fourni $_POST
pour les caractères multi-octets.
Suggestion
- supprimer le second
mysql_connect($db_host,$username,$password);
- ajouter explicitement
$db_con
lors de l'exécution demysql_real_escape_string