ZATRZYMAJ
Wstawianie do bazy danych bezpośrednio z postu to zawsze zły pomysł. To jest powód, dla którego PHP obecnie utknął z bardzo nieintuicyjnymi magicznymi cytatami.
Powinieneś przynajmniej używać mysql_real_escape_string() do ucieczki danych. Na przykład:
$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);
Powodem, dla którego musisz to zrobić, jest bezpieczeństwo. Na przykład, jeśli jakiś złośliwy ustawi pole nazwy użytkownika na '); DROP TABLE users;
bez wcześniejszej ucieczki Twoich danych. Skończyłbyś na ślepo uruchamiając następujące zapytanie:
INSERT INTO users VALUES (''); DROP TABLE users;
Co oczywiście nie zakończy się dobrze dla Twojej aplikacji.
To jest minimum powinieneś robić.
W rzeczywistości powinieneś przejść do MySQLi Który jest znacznie bardziej nowoczesnym interfejsem MySQL. Oto przykład
$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);
Możesz nawet używać MySQL w stylu proceduralnym. Więc jeśli programowanie obiektowe nie jest jeszcze w Twoim zasięgu, nie będziesz miał problemów z MySQLi.
Mam nadzieję, że to pomoże.