STOPPA
Att infoga i en databas direkt från posten är alltid en dålig idé. Detta är anledningen till att PHP för närvarande har fastnat i de mycket ointuitiva magiska citaten.
Du bör åtminstone använda mysql_real_escape_string() för att undkomma din data. Till exempel:
$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);
Anledningen till att du måste göra detta är säkerhetsbaserad. Till exempel om någon skadlig person ställer in användarnamnsfältet till '); DROP TABLE users;
utan att först fly dina data. Du skulle sluta blint köra följande fråga:
INSERT INTO users VALUES (''); DROP TABLE users;
Vilket naturligtvis inte kommer att sluta bra för din ansökan.
Detta är minsta du borde göra.
I verkligheten borde du verkligen gå över till MySQLi Vilket är ett mycket modernare MySQL-gränssnitt. Här är ett exempel
$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);
Du kan till och med använda MySQL i en procedurstil. Så om objektorienterad programmering inte är inom din räckvidd ännu kommer du inte att ha några problem med MySQLi.
Hoppas det hjälper.