我有一张这样的表:
-------------------------------------
| id | name |
-------------------------------------
| 1 | butter |
| 2 | cheese |
| 3 | steak |
-------------------------------------
这些值的加密版本为:
SELECT id, ENCRYPT(`name`, 'thisismycoolsalt') FROM `table`
-------------------------------------
| id | name |
-------------------------------------
| 1 | 74684a4e6b6d564b526e76674d |
| 2 | 74686e5a7379506554564b3451 |
| 3 | 74687341565776786a55704359 |
-------------------------------------
我的问题是,如果我有该名称的加密版本,我该如何选择未加密形式的行?
我正在尝试这样做,但这是不正确的语法:
SELECT *
FROM `table`
WHERE ENCRYPT(`name`, 'thisismycoolsalt')='74684a4e6b6d564b526e76674d'
答案 0 :(得分:0)
您正在做的事情应该有效,如下所示:http://sqlfiddle.com/#!2/da7bc4/10
带有JOIN
子句的版本:
SELECT
plain.id, plain.name,
encrypted.id AS e_id, encrypted.name AS e_name
FROM encrypted
INNER JOIN plain ON ENCRYPT(plain.name, encrypted.salt) = encrypted.name;
带有简单WHERE
子句的版本:
SELECT *
FROM plain
WHERE ENCRYPT(name, 'thisismycoolsalt') = 'thsAVWvxjUpCY'
数据:
Plain table :
ID NAME
1 butter
2 cheese
3 steak
Encrypted table :
ID NAME SALT
1 thJNkmVKRnvgM thisismycoolsalt
2 thnZsyPeTVK4Q thisismycoolsalt
3 thsAVWvxjUpCY thisismycoolsalt
如果您需要更多帮助,也许您可以发布您获得的语法错误。