Php CONCAT&x2B;加密后修剪不再工作
由于对数据库中的某些信息进行了加密,因此使用现有的搜索功能非常困难。它的功能是按名字、姓氏或两个名字搜索学生表 旧的工作代码如下:Php CONCAT&x2B;加密后修剪不再工作,php,sql,database,concat,trim,Php,Sql,Database,Concat,Trim,由于对数据库中的某些信息进行了加密,因此使用现有的搜索功能非常困难。它的功能是按名字、姓氏或两个名字搜索学生表 旧的工作代码如下: SELECT * FROM students WHERE CONCAT(TRIM(firstname), ' ', TRIM(lastname)) LIKE '%$result%' AND currentyear = $currentyear ORDER BY students.lastname 加密后的新非工作代码: SELECT *, AES_
SELECT *
FROM students
WHERE CONCAT(TRIM(firstname), ' ', TRIM(lastname)) LIKE '%$result%'
AND currentyear = $currentyear
ORDER BY students.lastname
加密后的新非工作代码:
SELECT *,
AES_DECRYPT(firstname,UNHEX(SHA2('',512))) AS stfirst,
AES_DECRYPT(lastname,UNHEX(SHA2('',512))) AS stlast
FROM students
WHERE CONCAT(TRIM(stfirst), ' ', TRIM(stlast)) LIKE '%$result%'
AND currentyear = $currentyear
ORDER BY stlast
我是不是错过了一些很愚蠢的事情?谢谢。您不能在where条件下使用“选择别名”。。你应该重复代码 如果要比较加密值,还应将匹配值加密 最后尝试使用concat(“%”,$result,“%”),而不是“%$result%”
SELECT *
, AES_DECRYPT(firstname,UNHEX(SHA2('',512))) AS stfirst
, AES_DECRYPT(lastname,UNHEX(SHA2('',512))) AS stlast
FROM students
WHERE CONCAT(TRIM(AES_DECRYPT(firstname,UNHEX(SHA2('',512)))), ' ',
TRIM(AES_DECRYPT(lastname,UNHEX(SHA2('',512)))))
LIKE TRIM(AES_DECRYPT( concat('%', $result,'%'),
UNHEX(SHA2('',512)))))
AND currentyear = $currentyear
ORDER BY stlast
您可能正在使用MySQL。如果是这样,MySQL将扩展SQL,这样您就可以使用带有列别名的
HAVING
子句,这样您就可以将查询编写为:
SELECT s.*,
AES_DECRYPT(firstname,UNHEX(SHA2('', 512))) AS stfirst,
AES_DECRYPT(lastname,UNHEX(SHA2('', 512))) AS stlast
FROM students s
WHERE currentyear = $currentyear
HAVING CONCAT(TRIM(stfirst), ' ', TRIM(stlast)) LIKE '%$result%'
ORDER BY stlast;
现在请不要在live实例中更改密码。为什么要加密表中的数据?现在使用的查询效率非常低,无法使用Indexing。我必须为新的欧洲GDPR法规加密数据。不过,将
$result
分成两个(?)部分,并对它们进行加密,以便您可以将它们与已加密的列内容进行比较,可能更有意义…(这可能会留下修剪的问题,但为什么在开始插入数据时不应用此问题?如果在此时忽略此问题,那么现在可能首先触发decrypt trim encrypt update查询。)请用你正在使用的数据库标记。我已经尝试过了,而且刚刚又尝试过,但恐怕也不行。什么叫“不行”?…您有错误?显示错误消息..错误结果?显示预期结果和实际结果没有错误消息,代码正常工作,但它提供0个结果。正如我前面所说,由于我一直使用加密数据,该问题才停止工作。这似乎是解密问题。请删除WHERE子句,然后查看您在别名stfirst
和stlast
下选择的e值包含正确的“解码”名称,正如您所期望的那样…?@PhilHowell..答案已更新..(无论如何,where使用别名工作似乎很奇怪)