CONCAT + TRIM больше не работает после шифрования - PullRequest
0 голосов
/ 07 ноября 2018

После шифрования определенной информации в моей базе данных у меня возникли большие трудности с использованием существующей функции поиска. Его функция заключается в поиске таблицы учеников по имени, фамилии или обоим именам.

Старый рабочий код выглядит следующим образом:

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

Я что-то упускаю здесь действительно глупо? Спасибо.

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Предположительно, вы используете 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;
0 голосов
/ 07 ноября 2018

Вы не можете использовать имя псевдонима, где условие .. Вы должны повторить код

и если вы хотите сравнить зашифрованные значения, вам также следует зашифровать соответствующее значение

и последняя попытка использовать 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
...