解决方案<!/强> 我做了@pilcrow建议的。查找mysql_error_num:1062(唯一的电子邮件)并返回错误(如果是这样)。
说明
我正在构建一个应用程序,需要许多不同的用户,可能还有公司通过注册表单注册。我想确保个人输入的电子邮件是唯一的,因为公司可能会向许多用户发送通用的info@company.com
电子邮件。
我希望能够检查数据库以查看是否存在电子邮件。
问题:
我已经知道如何通过Javascript
,ajax
和PHP
完成此操作,但我担心如果我有很多(数千)用户,那么查询将永远需要。特别是如果我决定在表单上使用keypress
事件而不是blur
事件。我可能错了,但我看不出一个简单的WHERE email = $email
是非常可扩展的。
问题
有没有办法设置我的代码或数据库(mysql)来加速查询?我正在考虑为电子邮件设置一个单独的表,但不要认为这样可行。
谢谢!
p.s。我非常关注数据库/服务器技术,所以PHP
+ MYSQL
就是这样。
答案 0 :(得分:1)
您的问题对于您将在数据库中存储的内容相当模糊。单独的电子邮件表的缺点是什么?
您真正需要的不仅仅是表格,而是电子邮件的索引。基础表可以只是电子邮件,也可以有其他用户信息。但是,如果执行查询,例如:
select email
from t
where email = <your email to check>
limit 1
然后查询将有效地使用索引进行匹配。
答案 1 :(得分:1)
你问
有没有办法设置我的代码或数据库(mysql)来加速查询?
是的,完全省略查询。
对存储在后端数据库中的电子邮件地址设置UNIQUE约束,然后准备好在由于重复的电子邮件地址而导致新帐户的INSERTion失败时捕获ER_DUP_UNIQUE。
该方法可防止重复,并在选择副本时警告新用户。
我非常怀疑您需要在输入时查找电子邮件地址(“......如果我决定使用keypress
事件......”)。如果您确实想在INSERTing之前检查地址是否存在,那么您还需要一个事务来阻止TOCTOU欢闹。但是,由于UNIQUE约束是最简单但最有效的防御重复,所以只需实现它。