Достаточно ли шестнадцатеричного ввода для очистки запросов SQL?

Прошлой ночью я читал о предотвращении SQL-инъекций и наткнулся на этот ответ:

Как я могу предотвратить внедрение SQL в PHP?

В комментариях к «Твоему здравому смыслу» это звучало так, как будто это было неблагополучно / небезопасно. Тем не менее, в моем (хотя и ограниченном) тестировании я обнаружил, что php «bin2hex ($ var)» работает со всем, что я на него бросил - литеральным числом, числовой строкой, текстовой строкой - даже при сопоставлении с числовым столбцом (tinyint).

У меня такой вопрос: есть ли способ ввести SQL, когда каждый пользовательский ввод очищается с помощью его шестнадцатеричного кода? По сути, каждый раз, когда был сделан запрос, он будет выглядеть примерно так:

$query="SELECT * FROM table WHERE someidentifier=UNHEX('".bin2hex($unsafe_user_input)."') LIMIT 1"

В основном перевод на:

SELECT * FROM table WHERE someidentifier=UNHEX('0b99f') LIMIT 1

Есть ли дыры в этом типе безопасности?

PS - я не просто ищу ответы типа "Почему бы просто не использовать PDO или MySQLi с подготовленными утверждениями?" Это может подпасть под огромное зло упреждающей оптимизации, но я бы предпочел не удваивать накладные расходы на мой запрос (и да, я понимаю, что это может быть быстрее с несколькими одинаковыми запросами, но я не часто сталкиваюсь с такой ситуацией).

Ответы на вопрос(4)

Ваш ответ на вопрос