止まる
投稿から直接データベースに挿入することは、常に悪い考えです。これが、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;
もちろん、これはあなたのアプリケーションにとってうまくいくとは限りません。
これはあなたがしなければならない最低限のことです。
実際には、より最新の MySQL インターフェイスであるMySQLiに移行する必要があります。ここに例があります
$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 に問題はありません。
それが役立つことを願っています。