次のコードは、MySQLクエリを含む文字列変数を宣言するだけです。
$sql = "INSERT INTO users (username, password, email)
VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";
クエリは実行されません。そのためには、いくつかの関数を使用する必要がありますが、最初に別のことを説明させてください。
ユーザー入力を信頼しないでください :ユーザー入力($_GET
からのフォーム入力など)を追加しないでください または$_POST
)直接 あなたの質問に。誰かが入力を注意深く操作して、データベースに大きな損害を与える可能性があります。これはSQLインジェクションと呼ばれます。詳細については、こちら
をご覧ください。
このような攻撃からスクリプトを保護するには、必要 プリペアドステートメントを使用します。プリペアドステートメントの詳細
次のように、プリペアドステートメントをコードに含めます。
$sql = "INSERT INTO users (username, password, email)
VALUES (?,?,?)";
?
に注目してください 値のプレースホルダーとして使用されます。次に、mysqli_prepare
を使用してステートメントを準備する必要があります :
$stmt = $mysqli->prepare($sql);
次に、入力変数をプリペアドステートメントにバインドし始めます。
$stmt->bind_param("sss", $_POST['username'], $_POST['email'], $_POST['password']);
そして最後に、準備されたステートメントを実行します。 (これが実際の挿入が行われる場所です)
$stmt->execute();
注 質問の一部ではありませんが、パスワードをクリアテキストで保存しないことを強くお勧めします。代わりに、password_hash
を使用する必要があります パスワードのハッシュを保存するには