也许不是最好的话题,但我试图用一个简单的例子来解释它。 我在示例中的表是:
CREATE TABLE users_logindata (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(250) UNIQUE DEFAULT NULL,
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE user_info(
id INT AUTO_INCREMENT PRIMARY KEY,
id_user INT,
adress VARCHAR(255),
name VARCHAR(255),
country VARCHAR(255),
city VARCHAR(255),
postal_place VARCHAR(255),
zip_code VARCHAR(255)
);
我有一个表包含用户的登录数据,另一个表包含" extra"用户可能填写的数据,如果他愿意。 但是所有这些都可以使用一个注册表单填写!
该脚本首先通过将给定数据(必需)添加到数据库来创建用户。 为了获得引用user_info表(存储额外数据)的id,我需要从&users; login_logindata'中获取id。 并在' user_info'中使用id作为参考。表
获取最后一个ID的代码:
/* get last entry in db*/
public function getLastEntry($tablename){
if ($result = $this->connect()->db_connection->query("SELECT id FROM $tablename ORDER BY id DESC LIMIT 1" )) {
while ($o = $result->fetch_object()) {
return $o->id;
}
}
}
步骤类似于:
1)将用户添加到' users_logindata'
2)从' users_logindata'
中选择最后一个ID来获取ID3)使用步骤2中的值并将其添加到' user_info => id_user'表
然后我的问题是:如果我有很多用户同时注册,那么该ID可能会被混淆吗?因为一个用户可以在adduser查询(step1)和id的获取(step2)之间进行注册。 因为即时获取最后一个ID,实际上可能是另一个ID,因为一次注册更多?,或者PHP一次处理一个.php文件?
答案 0 :(得分:1)
你的问题很多东西都是混淆的。您的Web服务器配置决定处理多少请求等。
如果您使用的是MySQL / MariaDB,那么“last insert id”功能应仅适用于当前连接。由于您在每个请求上创建了一个新连接,因此这应该是完全可以的。
对于LAST_INSERT_ID(),最近生成的ID在每个连接的基础上在服务器中维护。
http://dev.mysql.com/doc/refman/5.7/en/getting-unique-id.html
答案 1 :(得分:0)
我建议将这些数据存储在一个表中,因为它似乎没有多少信息可以分成多个表。