Как правило ни одна ORM не умеет экранировать спец-символы в LIKE
и разработчик должен об этом позаботиться сам. Опасного в том, что вы забудете это сделать, или не делали по какой-то другой причине, нет. Пользователь лишь будет находить записи, которые совсем не ожидал увидеть.
В MySQL и PostgreSQL для LIKE
используются следующие входящие специальные символы (в других БД могут быть и другие):
%
;_
;\
.
Эти символы может передать пользователь, что приведет к появлению интересных результатов. Подробнее об этом можно прочитать здесь.
Поэтому, нам нужно эти символы экранировать согласно требованиям БД:
/**
* @param string $value
* @return string
*/
function escapeLikeValue($value)
{
return addcslashes($value, '\\%_');
}
$query->andWhere('username LIKE ?', '%' . escapeLikeValue($_GET['query']) . '%');