DETENER
Insertar en una base de datos directamente desde la publicación siempre es una mala idea. Esta es la razón por la que PHP actualmente está atascado con las comillas mágicas muy poco intuitivas.
Como mínimo, debería usar mysql_real_escape_string() para escapar de sus datos. Por ejemplo:
$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);
La razón por la que tiene que hacer esto se basa en la seguridad. Por ejemplo, si algún malicioso establece el campo de nombre de usuario en '); DROP TABLE users;
sin antes escapar de sus datos. Terminaría ejecutando a ciegas la siguiente consulta:
INSERT INTO users VALUES (''); DROP TABLE users;
Lo cual, por supuesto, no terminará bien para su aplicación.
Este es el mínimo deberías estar haciendo.
En realidad, debería pasar a MySQLi Que es una interfaz MySQL mucho más moderna. Aquí hay un ejemplo
$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);
Incluso puede usar MySQL en un estilo de procedimiento. Entonces, si la programación orientada a objetos aún no está a su alcance, no tendrá problemas con MySQLi.
Espero que ayude.