Как правило, вы не должны шифровать данные, хранящиеся в базе данных, которые необходимо искать.
В вашем примере вы даете, это было бы полезно знать контекст, почему вы захватывая пользователя по имени, и что ваши общие проблемы безопасности ...
$hashed_search = myhash('John');
$q = 'SELECT * FROM table WHERE first_name_hashed = '.$hashed_search;
Является ли это веб приложение, и ваша главная проблема заключается в незашифрованной передаче личной информации пользователя по сети? Используйте шифрованное соединение при отправке данных между ПК пользователя и сервером (например, «https»).
Вы беспокоитесь, что кто-то взломал сервер и загрузил копию базы данных? Подумайте об ограничении количества личной информации, которую вы храните. Вам действительно нужно хранить настоящее имя пользователя?
Предполагая, что вам необходимо хранить личную идентификационную информацию о пользователе, подумайте о том, чтобы использовать другие методы для извлечения своих записей из базы данных, чем с помощью лично идентифицирующих частей (т. Е. Не захватывать их по «first_name»). Рассмотрите возможность захвата пользователя по идентификатору или именем пользователя, которое может быть не связано с их настоящими именами. Это позволит вам использовать индексирование для быстрого извлечения записей, и вы можете зашифровать свою личную информацию (имя, фамилию, адрес электронной почты, номер телефона и т. Д.) До вашего сердца.
Если это вас не устраивает, возможно, вы найдете более подробные сведения о том, что вы пытаетесь выполнить и почему.
TLDR: Попытка поиска по зашифрованным данным - плохая идея. Подумайте, какую проблему вы пытаетесь избежать, и придумайте альтернативное решение.
Как вы собираетесь искать зашифрованные данные? Каким будет поисковый запрос? – Quassnoi
Что здесь используется для шифрования? После хэширования данных вы можете делать только точные совпадения, нет возможности выполнять частичное совпадение. – tadman
То, что вы ищете, является строкой, и вам нужно процитировать ее соответствующим образом. Теоретически это должно вызывать синтаксическую ошибку. –