После шифрования определенной информации в моей базе данных у меня возникли большие трудности с использованием существующей функции поиска. Его функция заключается в поиске таблицы учеников по имени, фамилии или обоим именам.
Старый рабочий код выглядит следующим образом:
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
Я скучаю по чему-то действительно глупому здесь? Спасибо.
Вы не можете использовать псевдоним выбора, где условие .. вы должны повторить код
и если вы хотите сравнить зашифрованные значения, вы должны также зашифровать соответствующее значение
и последняя попытка использовать 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;