PARAR
Inserir em um banco de dados diretamente do post é sempre uma má ideia. Esta é a razão pela qual o PHP está atualmente preso com aspas mágicas não intuitivas.
Você deve pelo menos estar usando mysql_real_escape_string() para escapar de seus dados. Por exemplo:
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
OR die(mysql_error());
$query = "INSERT INTO users VALUES (
'" . mysql_real_escape_string($_POST["username"]) . "',
'" . mysql_real_escape_string($_POST["sha_pass_hash"]) . "',
'" . mysql_real_escape_string($_POST["email"]) . "',
'2'
)";
mysql_query($query);
A razão pela qual você precisa fazer isso é baseada em segurança. Por exemplo, se algum mal-intencionado definir o campo de nome de usuário para
'); DROP TABLE users;
sem primeiro escapar de seus dados. Você acabaria executando cegamente a seguinte consulta:INSERT INTO users VALUES (''); DROP TABLE users;
O que obviamente não vai acabar bem para sua aplicação.
Este é o mínimo você deveria estar fazendo.
Na realidade, você realmente deveria estar migrando para o MySQLi Que é uma interface MySQL muito mais moderna. Aqui está um exemplo
$mysqli = new mysqli('mysql_host', 'mysql_user', 'mysql_password', 'mysql_database');
$query = "INSERT INTO users VALUES (
'" . $mysqli->real_escape_string($_POST["username"]) . "',
'" . $mysqli->real_escape_string($_POST["sha_pass_hash"]) . "',
'" . $mysqli->real_escape_string($_POST["email"]) . "',
'2'
)";
$mysqli->query($query);
Você pode até usar o MySQL em um estilo procedural. Portanto, se a programação orientada a objetos ainda não estiver ao seu alcance, você não terá problemas com o MySQLi.
Espero que ajude.