Jak je vysvětleno zde:Ochraňuje mysql_real_escape_string() PLNĚ před SQL injection?
Na základě vašeho fragmentu kódu jste připojili databázi dvakrát.
$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);
A nezadali jste identifikátor odkazu na databázi pro :
$email= mysql_real_escape_string($_POST['email']);
$name= mysql_real_escape_string($_POST['name']);
$sex= mysql_real_escape_string($_POST['sex']);
Proto mysql_set_charset nemá žádný vliv na dodaný skutečný escape$_POST
pro vícebajtové znaky.
Návrh
- odstraňte druhý
mysql_connect($db_host,$username,$password);
- explicitně přidejte
$db_con
při prováděnímysql_real_escape_string