SQL Select 语句,2 个表 [重复]

Posted

技术标签:

【中文标题】SQL Select 语句,2 个表 [重复]【英文标题】:SQL Select Statement, 2 tables [duplicate] 【发布时间】:2013-12-21 08:20:56 【问题描述】:

我有两张桌子: Userlogindetails(用户名,通过) 用户详细信息(电子邮件、用户名*)

-加粗的是PK,星号是FK

我正在尝试使用 sql 语句创建忘记密码的 php 页面。 用户将输入他们的电子邮件地址,sql 语句将在 Userdetails 中检查电子邮件是否正确。 然后 Userdetails 中的用户名将与 Userlogindetails 匹配以找到密码。 我需要两个陈述吗?

谢谢

【问题讨论】:

首先需要去掉“匹配Userlogindetails找到密码的`”。切勿存储密码,除非您正在构建密码库。 如果用户和他们的登录名之间存在一对一的关系(似乎是因为这里没有其他字段),为什么不简单地有一个表? @GolezTrol 存储密码是典型的做法。但是,如果您的意思是永远不应该存储明文/未加密的密码,我会同意您的看法。密码应始终经过某种形式的散列/加密进行存储。 @MikeBrant 散列,不加密。两者有很大的不同。加密意味着您可以解密它。除了尝试找到匹配的a(不一定是your)密码外,没有去散列这样的事情。您不应该存储密码,无论是否加密。只需存储一个哈希,让用户在忘记密码时设置一个新密码。 是的,Adobe 最近被烧毁了,因为他们使用加密而不是散列 slashdot.org/story/13/11/05/1655225/… 【参考方案1】:

不(您不需要 2 个语句),您可以使用 SQL JOIN 来完成此操作,例如

SELECT b.pass FROM 
userdetails a
LEFT JOIN 
userlogindetails b 
ON a.username = b.username
WHERE a.email = <put user input here, use a parameterized query>

SQL 联接:

http://www.w3schools.com/sql/sql_join.asp

正如其他人所指出的,您不应该在数据库中存储密码。根据您的特定安全需求,您需要确定这是否是一个好主意。这里讨论了用于存储的密码 + 盐哈希技术:

https://www.owasp.org/index.php/Password_Storage_Cheat_Sheet

【讨论】:

以上是关于SQL Select 语句,2 个表 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

用于多个连接的 Spark SQL 广播 [重复]

如何使用SQL语句消除重复列

sql语句要select某字段不重复的数据应该如何写?

SQL Server中怎样可以从SELECT语句的结果集中删除重复行

Oracle 查询并删除重复记录的SQL语句

几个删除重复记录的SQL语句