为Web应用程序创建唯一的用户帐户

时间:2013-11-21 04:15:28

标签: php mysql user-accounts user-registration

我正在开发一个我需要创建用户帐户的Web应用程序; user-id是用户的电子邮件地址。用户ID和密码存储在MySQL数据库中。

要创建帐户,用户会转到注册页面,并输入他/她的电子邮件地址和密码。如果电子邮件地址不在数据库中,则会创建一个新帐户。这是两个数据库操作 - 首先检查电子邮件地址是否已经在数据库中,如果没有,则第二个用新的电子邮件地址创建新的用户记录。

这个两步骤流程可以创建两个具有相同电子邮件地址的帐户。所以我的问题是:如何使这成为一种原子操作来消除这种可能性。

我正在使用PHP和MySQL。

修改:不明白为什么这个问题被搁置了。构建Web应用程序的程序员必定会遇到此问题,问题是要求使用故障安全算法并处理常见工具PHP& MySQL的。此外,已经解释了一个尝试的解决方案,显然不起作用。

2 个答案:

答案 0 :(得分:0)

在mysql中使用UNIQUE。这将阻止它发生,但如果你尝试,你会得到一个错误。然后在PHP中你需要一些东西来搜索现有的东西。你可以做一些简单的事情:

SELECT 1 FROM users WHERE username ='blah@blah.com';

如果1在那里,那么你有一个已经存在的用户,你不想尝试添加那个人。

答案 1 :(得分:0)

首先,在该列上创建一个唯一约束,以确保它永远不会有多个具有相同电子邮件地址的记录。如果应用程序尝试插入重复记录,则插入查询将失败。

其次,当应用程序尝试插入重复记录时,您可能希望使用MySQL的INSERT IGNORE来抑制错误。然后,您可以按相反的顺序执行两个查询: first 执行INSERT IGNORE创建记录(如果还没有记录),然后 {{ 1}}根据电子邮件地址您需要的任何信息。如果已存在同一电子邮件地址的记录,则SELECT将不执行任何操作,INSERT IGNORE将找到该预先存在的记录。