我需要将用户名,密码,邮件,名字和姓氏的值发送到数据库中的两个不同表中。我用这段代码实现了这一点,并且我得到了正确的值。我有一个问题。当用户信息进入“用户”表时,它会自动生成一个userId。我需要使用相同的userId并将其放入另一个表“ usermeta”中,以将信息连接到正确的用户。现在发生的是,我在users表中获得了一个userId,但是在usermeta表中,所有新用户的userId = 0。谁能帮我吗?
if (isset($_POST['username']) and isset ($_POST['password'])) {
$username = $mysqli->real_escape_string($_POST['username']);
$password = md5($mysqli->real_escape_string($_POST['password']));
$email = $mysqli->real_escape_string($_POST['mail']);
$fname = $mysqli->real_escape_string($_POST['fname']);
$lname = $mysqli->real_escape_string($_POST['lname']);
$query = <<<END
INSERT INTO users(username,pass,email,admin)
VALUES('{$username}','{$password}','{$email}','{$_POST['admin']}')
END;
$q = <<<END
INSERT INTO usermeta(first_name,last_name)
VALUES('{$fname}','{$lname}')
END;
if ($mysqli->query($query) !== TRUE) {
die("Could not query database" . $mysqli->errno . " : " . $mysqli->error);
}
if ( $mysqli->query($q) !== TRUE) {
die("Could not query database" . $mysqli->errno . " : " . $mysqli->error);
header('Location:home.php');
}
}
我在代码中得到了一个表格,该信息来自数据库,但是正是php代码使我认为错误排除了该代码。
谢谢!
编辑:
我已尝试实施您的不同评论。非常感谢您的回答! 如果我尝试获取$ query和$ q之间的最新ID,则输出为0。如果我使用以下命令:
if ($mysqli->query($query) === TRUE) {
$last_id = $mysqli->insert_id;
echo $last_id;
} else {
echo "Error: " . $query . "<br>" . $mysqli->error;
}
我得到正确的ID。但是,如何在新的$ q中使用该变量?似乎如果if完成,功能就会中断。
谢谢! :)
答案 0 :(得分:0)
您可以使用LAST_INSERT_ID()
来检索在上一次插入中创建的自动增量ID的值。 (此处{Docs)
所以尝试:
$q = <<<END
INSERT INTO usermeta(first_name,last_name, userId)
VALUES('{$fname}','{$lname}', LAST_INSERT_ID();)
END;
答案 1 :(得分:0)
Okey我设法完成了它。谢谢大家的帮助!
工作代码如下:
$query = <<<END
INSERT INTO users(username,pass,email,admin)
VALUES('{$username}','{$password}','{$email}','{$_POST['admin']}')
END;
if ($mysqli->query($query) === TRUE) {
$last_id = $mysqli->insert_id;
} else {
echo "Error: " . $query . "<br>" . $mysqli->error;
}
$q = <<<END
INSERT INTO usermeta(first_name,last_name, user_id)
VALUES('{$fname}','{$lname}','{$last_id}')
END;
if ($mysqli->query($q) !== TRUE) {
die("Could not query database" . $mysqli->errno . " : " . $mysqli->error);
}