【问题标题】:MySql: Select inside if statementMySql:在if语句中选择
【发布时间】:2018-08-27 05:20:40
【问题描述】:

有没有一种可能的方法可以选择作为答案?,我正在尝试在 MySql 中执行此操作,但它总是显示为错误:

//管理员和信息是表。 //inmobiliaria 是架构。

SELECT if(administrador.usuario='Admin0'&&administrador.password='pass123', 
select * from inmobiliaria.informacion, null) FROM inmobiliaria.administrador;

最后,如果管理员表中的密码和用户与文本框中输入的相同,我会尝试从“信息”表中获取所有内容,但我还没有找到方法。

【问题讨论】:

  • 样本数据和期望的结果真的很有帮助。
  • administradorinformacion table 之间有关系吗?
  • 看起来您正在验证用户 ID 是否为 Admin0 并且密码是否正确。因此,您首先放置 if 语句,然后执行 select 语句。你不能同时做这两件事。
  • 管理员和信息之间没有关系,因为我打算将它用于隐藏形式的日志,而信息只是一个简单的可编辑图库。应该有吗?
  • 不要将密码存储为纯文本!用盐散列。

标签: c# mysql sql asp.net


【解决方案1】:

很难说出你想要什么,但我认为你的目标是如果用户名和密码正确,则从 inmobiliaria.informacion 中选择所有内容,或者返回 null。

请注意将密码作为纯文本存储在数据库中是一个非常非常糟糕的主意。您永远不应该将密码存储为纯文本。 处理密码的正确方法是存储一个加盐哈希,这样即使有人会破解您的数据库,密码也不能被反向生成。 欲了解更多信息,请阅读Salted Password Hashing - Doing it Right.

你可以这样做:

SELECT <ColumnsList>
FROM inmobiliaria.informacion
WHERE EXISTS
(
     SELECT 1
     FROM administrador
     WHERE usuario='Admin0'
     AND password='pass123'
)

如果用户和密码不匹配,这将返回一个空的结果集。

【讨论】:

  • 非常感谢!它有效!确实,这就是我想要做的,如果我没有很好地表达自己,我很抱歉。