СПРИ
Вмъкването в база данни директно от публикацията винаги е лоша идея. Това е причината PHP в момента да е заседнал с много неинтуитивните магически кавички.
Най-малкото трябва да използвате mysql_real_escape_string(), за да избегнете вашите данни. Например:
$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);
Причината да направите това е базирана на сигурността. Например, ако някой злонамерен зададе полето за потребителско име на '); DROP TABLE users;
без първо да избягвате вашите данни. В крайна сметка ще изпълните сляпо следната заявка:
INSERT INTO users VALUES (''); DROP TABLE users;
Което, разбира се, няма да свърши добре за вашето приложение.
Това еминимума трябва да правите.
В действителност наистина трябва да преминете към MySQLi Което е много по-модерен MySQL интерфейс. Ето един пример
$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);
Можете дори да използвате MySQL в процедурен стил. Така че, ако обектно-ориентираното програмиране все още не е в обсега ви, няма да имате проблеми с MySQLi.
Надявам се, че това помага.