作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
注册表要求提供用户名和电子邮件地址。数据通过验证后,将添加到 accounts
表中。它存储用户名、密码和电子邮件地址等数据。如果用户名已被占用,用户将收到通知,并且不会将任何数据添加到表中。它被视为 security issue如果立即通知用户该电子邮件地址已在表中。建议的解决方案是始终发送验证电子邮件,如果输入的用户名已存在,则电子邮件会显示“此电子邮件地址已被使用”(并且没有激活链接当然会给出)。
问题是,就目前的情况而言,如果 INSERT
查询无法将数据插入表中,则会显示消息“用户名已获取”。这可能是错误的,因为电子邮件地址在表中设置为唯一,因此如果输入相同的电子邮件地址,查询将失败。我无法再发送一封显示“该电子邮件地址已被使用”的验证电子邮件,因为表中没有包含该电子邮件地址的记录。
如何重新设计系统使其正常工作?
我使用的是 MySQL,表 accounts
具有主键 username
唯一键 e-mail
和属性 password
和激活
。
if(mysqli_stmt_execute($createAccount))
echo 'Username available!';
else
echo 'Username unavailable!';
在 SQL 中是否有某种方法可以检查为什么查询无法插入到表中?例如,它可以判断哪个属性具有重复值吗?
如果我的问题不清楚,请告诉我。
最佳答案
首先运行 SELECT 查询来识别重复项。如果没有找到重复项,那么您可以执行 INSERT。
关于mysql - 设计困境 : If e-mail address already used, 发送电子邮件 "e-mail address already registered",但无法发送,因为无法将重复项添加到表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18154031/
我是一名优秀的程序员,十分优秀!