Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CONCAT&x2B;加密后修剪不再工作_Php_Sql_Database_Concat_Trim - Fatal编程技术网

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使用别名工作似乎很奇怪)