【发布时间】:2016-04-30 03:40:20
【问题描述】:
我正在设计一个带有用户登录和注册邮箱验证的网站,当用户注册一个帐户时,它会成功、正确地将用户记录插入到“用户”表中的数据库中。
但是,当我尝试提取插入时创建的用户 ID 以将它们插入到第二个表中以获取站点所有成员的花名册(这是针对游戏部落)时,它会将用户 ID 插入为 0 roster 表,无论他们的 id 在该用户的“users”表中是什么。
这是我的代码:
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');
}
}
出于安全原因,我省略了与本节无关的某些变量和代码部分,这让我很头疼。
我不明白为什么它没有将该用户帐户从“users”中新创建的“id”插入“userid”列下的“roster”表中。
另外,为了测试一些东西,我还设置了一个会话变量
$_SESSION['uid'] = $ui;
直接在该行之后
$stmt->store_result($ui);
并在我的 index.php 文件中回显它,它也将会话变量显示为 0。
【问题讨论】:
-
您确定该代码块正在执行吗?您应该添加一些
mysqli_error()s 以查看是否有任何问题。看起来一切都会默默地失败。 -
你能在你的代码中添加调试语句吗? print_r($stmt); 的输出是什么
标签: php sql mysqli prepared-statement