0

我有一个名为 invisible 的表,其中包含 3 个字段(user_id、用户名、密码),另一个名为 user_info 的表包含字段(user_id、first_name 和 last_name)。user_info 中的 user_id 对不可见的 user_id 具有外键约束,并且该 id 由 MySQL 使用自动增量自动生成。我想将有关用户的数据插入这两个表中。截至目前,我想到的是使用 INSERT 插入一个随机的唯一用户名

$username=bin2hex(openssl_random_pseudo_bytes(10));
$password=bin2hex(openssl_random_pseudo_bytes(10));
$query="INSERT INTO invisible SET username='$username', password='$password'";
mysqli_query($query);

然后做

mysqli_query("INSERT INTO user_info SET user_id=(SELECT user_id FROM invisible WHERE username=$username AND password=$password) , first_name=$first_name, last_name=$lastname");

但是,我认为这是一种不好的做法,因为用户名和密码不必是唯一的。

所以我的问题是,有没有一种方法可以从上次插入中选择 user_id 而不必处理用户名和密码,或者更好的是,以某种更好的方式完成整个事情,比如一步?

4

2 回答 2

0

使用mysqli::$insert_id

$username=bin2hex(openssl_random_pseudo_bytes(10));
$password=bin2hex(openssl_random_pseudo_bytes(10));
$query="INSERT INTO invisible SET username='$username', password='$password'";
mysqli_query($query);

$inserted_user_id = mysqli::$insert_id;

mysqli_query("INSERT INTO user_info SET user_id=$inserted_user_id, first_name=$first_name, last_name=$lastname");
于 2013-08-19T20:23:36.783 回答
0

只需使用LAST_INSERT_ID(),它包含会话中最后一个自动生成的密钥(即来自您之前的插入)

INSERT INTO invisible SET username='$username', password='$password';
INSERT INTO user_info SET user_id=LAST_INSERT_ID();

一个简单的 SQLfiddle

于 2013-08-19T20:21:31.840 回答