最后在同一查询中插入另一个表的表的ID?

时间:2018-02-28 21:03:17

标签: php

我有一个注册,人们可以注册他们的用户名,他们的电子邮件和密码。如果成功传输到数据库,则此数据将插入名为users的表中。现在,我需要刚注册用户的最后一个ID,用于第二个名为users_tokens的表,我显然希望为每个特定用户保存一个令牌。我试图通过使用$ mysql-> insert_id来解决这个问题。但是在表中返回0并且我也很好奇这是否是一种安全的方法,因为通过我的网站数据会一直插入。

我的PHP脚本:

    $key = getToken(32);
    $token = bin2hex(openssl_random_pseudo_bytes(64));

    $stmt = $mysql->prepare("INSERT INTO users (name, email, password, verification_key, register_date) VALUES(?,?,?,?,?)");
    $stmt->bind_param("sssss", $_POST["name"], $_POST["email"], md5($_POST["password"]), $key, $posted_on);

    $lastid = $mysql->insert_id;
    $u_token = $mysql->prepare("INSERT INTO users_tokens (uid, token) VALUES(?,?)");
    $u_token->bind_param("ss", $lastid, $token);

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您只需要在检索insert_id之前执行您的声明,类似这样的

$stmt = $mysql->prepare("INSERT INTO users (name, email, password, verification_key, register_date) VALUES(?,?,?,?,?)");
$stmt->bind_param("sssss", $_POST["name"], $_POST["email"], md5($_POST["password"]), $key, $posted_on);
$stmt->execute(); //You should check for correct execution
$lastid = $mysql->insert_id;