sql >> データベース >  >> RDS >> Mysql

PHP:フォームからMySQLへの値の挿入

    次のコードは、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を使用する必要があります パスワードのハッシュを保存するには



    1. サブクエリからの複数の結果を回避する方法

    2. データセットの精度を計算する

    3. PSQLException:サーバーがパスワードベースの認証を要求しましたが、パスワードが提供されませんでした

    4. MySQLコードをAccessに変換する:GROUP_CONCATとトリプルJOIN