我正在设计一个用户登录并注册电子邮件验证的网站,当用户注册帐户时,它将成功并正确地将用户记录插入“用户”表中的数据库中。
但是当我尝试拉出插入时创建的用户ID以将其插入到第二个表中以获取该站点的所有成员的名单(这是用于游戏族)时,它将用户ID插入为0名册表,无论他们的id在该用户的“用户”表上是什么。
继承我的代码:
if($insert_stmt = $db->prepare("INSERT INTO users (username, password, email, date, actcode) VALUES (?, ?, ?, ?, ?)"))
{
$insert_stmt->bind_param('sssss', $username, $password, $email, $date, $actcode);
$stmt = $db->prepare("SELECT id FROM users WHERE email = ?");
if($stmt)
{
$stmt->bind_param('s', $email);
$stmt->execute();
$stmt->fetch();
$stmt->store_result();
$stmt->bind_result($ui);
}
$stmt = $db->prepare("INSERT INTO roster (userid, joindate) VALUES (?, ?)");
if($stmt)
{
$stmt->bind_param('ss', $ui, $date);
$stmt->execute();
}
if(!$insert_stmt->execute()) {
header('Location: error.php?err=Registration failure: INSERT');
}
}
出于安全考虑,我遗漏了某些变量和代码部分,这些部分对本节没有任何影响,让我头疼。
我无法弄清楚为什么它没有将“用户”中新创建的“id”插入“userid”列下的“名册”表中。
另外,为了测试一些东西,我还去了一个会话变量
$_SESSION['uid'] = $ui;
直接在
之后$stmt->store_result($ui);
并在我的index.php文件中回显它,它也将会话变量显示为0。
答案 0 :(得分:1)
您可以简单地使用此功能:mysqli::$insert_id而不是编写第二个查询。
替换此行:
$stmt = $db->prepare("SELECT id FROM users WHERE email = ?");
使用:
$userid = $db->insert_id;
让我知道这是否有效。
答案 1 :(得分:0)
仍然无法使用所提供的解决方案,但决定将所有内容合并到用户表中,从而解决了问题。至于检查它是否正在执行,我正在进行一些检查以确保它通过。感谢您的帮助和建议。