Вы можете сделать конкатенацию $ input на уровне SQL:
$sql=$DB->quoteInto("SELECT * FROM t WHERE myname LIKE '%'|| ? ||'%'",$input);
К сожалению, это невозможно использовать, если вы хотите, чтобы $ input мог содержать буквенные символы "%" или "_". Чтобы обойти это, укажите явный символ LIKE-ESCAPE и экранируйте его самостоятельно:
$inputlike= '%'.preg_replace('[%_=]', '=$0', $input).'%';
$sql=$DB->quoteInto("SELECT * FROM t WHERE myname LIKE ? ESCAPE '='", $inputlike);
(Это может быть любой символ, не обязательно '='. Это также работает вокруг ошибки, когда ESCAPE по умолчанию равен ‘\ ', если не указано в MySQL.)
К сожалению, SQL Server также принимает символ ‘['как специальный, для создания группы символов, похожих на регулярные выражения. Поэтому, если вашей БД является SQL Server, вы должны включить ‘[’ в группу в preg_replace. К сожалению, это недопустимый ANSL SQL для экранирования «[» в других СУБД, где его не нужно экранировать.