0

解决方案! 我按照@pilcrow 的建议做了。查找 mysql_error_num:1062 (唯一电子邮件),如果是则返回错误。

描述:

我正在构建一个应用程序,它需要许多不同的用户和可能的公司通过注册表单进行注册。我想确保个人输入的电子邮件是唯一的,因为公司可能会info@company.com向许多用户发出通用电子邮件。

我希望能够检查数据库以查看电子邮件是否存在。

问题:

我已经知道如何通过 完成此操作JavascriptajaxPHP我担心如果我有许多(数千)用户,查询将永远持续下去。特别是如果我决定在表单上使用keypress事件而不是blur事件。我可能错了,但我看不出一个简单WHERE email = $email的可扩展性很强。

问题

有没有办法可以设置我的代码或数据库(mysql)来加快查询速度?我正在考虑为电子邮件设置一个单独的表格,但认为这行不通。

谢谢!

ps我对数据库/服务器技术非常了解,所以PHP+ MYSQL

4

2 回答 2

1

您的问题对于您将在数据库中存储的内容相当模糊。单独的电子邮件表格有什么缺点?

您真正需要的不仅仅是一张表格,而是电子邮件索引。基础表可能只是电子邮件,也可能包含其他用户信息。但是,如果您执行如下查询:

 select email
 from t
 where email = <your email to check>
 limit 1

然后查询将有效地使用索引来进行匹配。

于 2012-08-28T16:41:14.907 回答
1

你问

有没有办法可以设置我的代码或数据库(mysql)来加快查询速度?

是的,完全省略查询。

对存储在后端数据库中的电子邮件地址设置一个 UNIQUE 约束,然后准备在新帐户的 INSERTion 由于重复的电子邮件地址而失败时捕获ER_DUP_UNIQUE 。

这种方法可以防止重复并在选择重复时警告新用户。

I very much doubt that you need to look up email addresses as they are being typed ("...if I decide to use a keypress event..."). If you really do want to check that the address exists before INSERTing, you'll also need a transaction to prevent TOCTOU hilarity. However, since the UNIQUE constraint is your simplest but most effective defense against duplicates, just implement that.

于 2012-08-28T16:58:59.607 回答