停止
投稿から直接データベースに挿入することは常に悪い考えです。これが、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<に移行する必要があります。 / a> これははるかに最新の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に問題はありません。
お役に立てば幸いです。