CONCAT + TRIM больше не работает после шифрования

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

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

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

Решение

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

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

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

Другие решения

Предположительно, вы используете 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

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector