PHP MySQLi编写的语句没有将数据插入表中

时间:2016-04-30 03:40:20

标签: php sql mysqli prepared-statement

我正在设计一个用户登录并注册电子邮件验证的网站,当用户注册帐户时,它将成功并正确地将用户记录插入“用户”表中的数据库中。

但是当我尝试拉出插入时创建的用户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。

2 个答案:

答案 0 :(得分:1)

您可以简单地使用此功能:mysqli::$insert_id而不是编写第二个查询。

替换此行:

$stmt = $db->prepare("SELECT id FROM users WHERE email = ?");

使用:

$userid = $db->insert_id; 

让我知道这是否有效。

答案 1 :(得分:0)

仍然无法使用所提供的解决方案,但决定将所有内容合并到用户表中,从而解决了问题。至于检查它是否正在执行,我正在进行一些检查以确保它通过。感谢您的帮助和建议。