【问题标题】:inserting data into tables that share foreign keys将数据插入共享外键的表中
【发布时间】:2020-04-03 02:12:58
【问题描述】:

我有 2 个表格需要从一个表格中插入。

表 1 - user_info(user_id(primary), full_name, username, user_password, email)

表 2 - user_personal_info(user_id(foreign), username(foreign), full_name(foreign), user_profession, user_phone, age)

user_id 是自动递增的。

我正在尝试获取注册表中收到的信息并将它们插入到每个表中。但是,第一个表格包含所有信息,而第二个表格没有。我尝试过两次单独的插入,但没有成功。任何帮助将不胜感激。

$full_name = $_POST['full_name'];
$username = $_POST['username'];
$email = $_POST['email'];
$user_password = $_POST['user_password'];
$password_hash = password_hash($user_password, PASSWORD_BCRYPT);

$id = $_SESSION['user_id'];
$user_profession = NULL;
$user_phone = NULL;
$age = NULL;

$query_user_info = $connection -> prepare("SELECT * FROM user_info WHERE EMAIL=:email");
$query_user_info->bindParam("email", $email, PDO::PARAM_STR);
$query_user_info->execute();

if ($query_user_info-> rowCount() > 0) {
    echo '<p class="error">The email address is already registered!</p>';
}

if ($query_user_info-> rowCount() == 0) {
    $query_user_info = $connection->prepare("INSERT INTO user_info(full_name,username,user_password,email) VALUES (:full_name, :username, :password_hash,:email)");
    $query_user_info->bindParam("full_name", $full_name, PDO::PARAM_STR);
    $query_user_info->bindParam("username", $username, PDO::PARAM_STR);
    $query_user_info->bindParam("password_hash", $password_hash, PDO::PARAM_STR);
    $query_user_info->bindParam("email", $email, PDO::PARAM_STR);
    $result = $query_user_info->execute();

    $query_user_personal_info = $connection->prepare ("INSERT INTO user_personal_info(user_id,full_name, username, email, user_profession, user_phone, age) VALUES (:id, :full_name, :username, :email, :user_profession, :user_phone, :age)");
    $query_user_personal_info->bindParam("user_id", $id, PDO::PARAM_INT);
    $query_user_personal_info->bindParam("full_name", $full_name, PDO::PARAM_STR);
    $query_user_personal_info->bindParam("username", $username, PDO::PARAM_STR);
    $query_user_personal_info->bindParam("email", $email, PDO::PARAM_STR);
    $query_user_personal_info->bindParam("user_profession", $user_profession, PDO::PARAM_STR);
    $query_user_personal_info->bindParam("user_phone", $user_phone, PDO::PARAM_INT);
    $query_user_personal_info->bindParam("age", $age, PDO::PARAM_INT);
    $result2 = $query_user_personal_info->execute();

    if ($result) { // create a profile page.
        echo '<p class="success">Your registration was successful!</p>';
    } else {
        echo '<p class="error">Something went wrong!</p>';
    }


    if ($result2) { // create a profile page.
        echo '<p class="success">Your registration was successful!</p>';
    } else {
        echo '<p class="error">no bueno :(</p>';
    }
}

【问题讨论】:

  • 如果用户还没有添加到表中,$_SESSION['user_id'] 如何存在?您收到此代码的错误吗?
  • 没有错误,但这是我最后一次尝试寻找解决方案。显然这是不正确的。
  • 所以你得到Your registration was successful! 两次?你有例外吗?
  • 第一次插入成功。我得到的第二个提示是 no bueno
  • 你回答了我一半的问题。 How does $_SESSION['user_id'] exist if the user hasn't been added to the table? ... Do you have exceptions on?php.net/manual/en/pdo.error-handling.php

标签: php mysql


【解决方案1】:

您不应该从 user_info 表中获取插入的 ID 吗?

试试这个

$full_name = $_POST['full_name'];
$username = $_POST['username'];
$email = $_POST['email'];
$user_password = $_POST['user_password'];
$password_hash = password_hash($user_password, PASSWORD_BCRYPT);

$user_profession = NULL;
$user_phone = NULL;
$age = NULL;

$query_user_info = $connection -> prepare("SELECT * FROM user_info WHERE EMAIL=:email");
$query_user_info->bindParam("email", $email, PDO::PARAM_STR);
$query_user_info->execute();

if ($query_user_info-> rowCount() > 0) {
    echo '<p class="error">The email address is already registered!</p>';
}

if ($query_user_info-> rowCount() == 0) {
    $query_user_info = $connection->prepare("INSERT INTO user_info(full_name,username,user_password,email) VALUES (:full_name, :username, :password_hash,:email)");
    $query_user_info->bindParam("full_name", $full_name, PDO::PARAM_STR);
    $query_user_info->bindParam("username", $username, PDO::PARAM_STR);
    $query_user_info->bindParam("password_hash", $password_hash, PDO::PARAM_STR);
    $query_user_info->bindParam("email", $email, PDO::PARAM_STR);
    $result = $query_user_info->execute();
    $id = $query_user_info->lastInsertId();

    $query_user_personal_info = $connection->prepare ("INSERT INTO user_personal_info(user_id,full_name, username, email, user_profession, user_phone, age) VALUES (:id, :full_name, :username, :email, :user_profession, :user_phone, :age)");
    $query_user_personal_info->bindParam("user_id", $id, PDO::PARAM_INT);
    $query_user_personal_info->bindParam("full_name", $full_name, PDO::PARAM_STR);
    $query_user_personal_info->bindParam("username", $username, PDO::PARAM_STR);
    $query_user_personal_info->bindParam("email", $email, PDO::PARAM_STR);
    $query_user_personal_info->bindParam("user_profession", $user_profession, PDO::PARAM_STR);
    $query_user_personal_info->bindParam("user_phone", $user_phone, PDO::PARAM_INT);
    $query_user_personal_info->bindParam("age", $age, PDO::PARAM_INT);
    $result2 = $query_user_personal_info->execute();

    if ($result) { // create a profile page.
        echo '<p class="success">Your registration was successful!</p>';
    } else {
        echo '<p class="error">Something went wrong!</p>';
    }


    if ($result2) { // create a profile page.
        echo '<p class="success">Your registration was successful!</p>';
    } else {
        echo '<p class="error">no bueno :(</p>';
    }
}

另外,您的数据库中是否需要$user_profession$user_phone$age?如果不是,那么如果它们只是默认为空值,则不需要将这些值插入到表中。

试着改成这个

$full_name = $_POST['full_name'];
$username = $_POST['username'];
$email = $_POST['email'];
$user_password = $_POST['user_password'];
$password_hash = password_hash($user_password, PASSWORD_BCRYPT);

$query_user_info = $connection -> prepare("SELECT * FROM user_info WHERE EMAIL=:email");
$query_user_info->bindParam("email", $email, PDO::PARAM_STR);
$query_user_info->execute();

if ($query_user_info-> rowCount() > 0) {
    echo '<p class="error">The email address is already registered!</p>';
}

if ($query_user_info-> rowCount() == 0) {
    $query_user_info = $connection->prepare("INSERT INTO user_info(full_name,username,user_password,email) VALUES (:full_name, :username, :password_hash,:email)");
    $query_user_info->bindParam("full_name", $full_name, PDO::PARAM_STR);
    $query_user_info->bindParam("username", $username, PDO::PARAM_STR);
    $query_user_info->bindParam("password_hash", $password_hash, PDO::PARAM_STR);
    $query_user_info->bindParam("email", $email, PDO::PARAM_STR);
    $result = $query_user_info->execute();
    $id = $query_user_info->lastInsertId();

    $query_user_personal_info = $connection->prepare ("INSERT INTO user_personal_info(user_id,full_name, username, email) VALUES (:id, :full_name, :username, :email)");
    $query_user_personal_info->bindParam("user_id", $id, PDO::PARAM_INT);
    $query_user_personal_info->bindParam("full_name", $full_name, PDO::PARAM_STR);
    $query_user_personal_info->bindParam("username", $username, PDO::PARAM_STR);
    $query_user_personal_info->bindParam("email", $email, PDO::PARAM_STR);
    $result2 = $query_user_personal_info->execute();

    if ($result) { // create a profile page.
        echo '<p class="success">Your registration was successful!</p>';
    } else {
        echo '<p class="error">Something went wrong!</p>';
    }


    if ($result2) { // create a profile page.
        echo '<p class="success">Your registration was successful!</p>';
    } else {
        echo '<p class="error">no bueno :(</p>';
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-06
    • 1970-01-01
    • 2020-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多