【发布时间】:2014-03-08 23:26:43
【问题描述】:
请您帮我解决这个问题:
SELECT
(SELECT AES_DECRYPT(cryptoword, SHA2('DatabaseEncryption1', 512)) FROM file_tree) AS cryptoword1,
(SELECT AES_DECRYPT(name, SHA2(cryptoword1, 512)) FROM file_tree) AS name;
正如主题所说,我收到错误消息说我的子查询返回超过 1 行。我想要实现的是:
- 获取特定数据库记录的密码。
- 使用该密码解密记录的其余部分。
- 对所有满足 WHERE 条件的表记录/多条记录重复该过程,我可以稍后添加
如果我只对一条记录使用查询,我的查询有效。但是,我需要从表中获取多条记录。每条记录都有自己的密码,每行都不同。因此,我的任务是获取特定记录的密码,并使用该密码来解密记录的其余部分。我需要对所有表记录重复此过程。
由于性能原因,所有这些都需要在一个查询中进行格式化。
提前谢谢你。
【问题讨论】:
-
您说针对特定的数据库记录,但您根本没有过滤您的结果。您的两个子查询都需要一个
WHERE子句,这将保证只返回 1 条记录。 -
或
LIMIT 1在每个查询的末尾告诉mysql只返回1行 -
我明白你的意思。挑战在于,我需要为整个表应用我的子查询。
-
@MatBailie,很棒的评论。这是我最初的目标。但是,在您的查询中解密 name 时,无法识别 cryptoword1。至少 MySql 拒绝了这样的查询。嗯,也许我在任何地方都犯了错误而忽略了它?
-
你为什么不直接用php来做呢?