Pardon Me! Where Do I Find 4giveness?, камон. Это же поколение Х, дети, воспитанные ютубой.
Он в принципе не в состоянии воспринимать печатный текст кроме как в виде надписи на картинке.
Контроллер - не единственная точка входа в приложение.
И к SQL инъекциям отношения не имеет. Разнесение валидации и исполнения запроса - это прямая дорога к инъекции.
Составлять запрос должен метод дата маппера (который неправильно называют моделью) и следить за безопасностью должен тоже он. При этом никто не мешает использовать унифицированные методы в мапперах. Вот пример такого класса.
При этом полностью универсальный метод, в который можно подставлять любые данные из любого класса - это головотяптсво и лень, которые доведут до больших неприятностей.
Чтобы избежать инъекций, в запросе не должно быть внешних данных.
Идея в том, чтобы плейсхолдеры (:name) писались программистом, руками, в коде программы.
А если они попадают в запрос извне, то это та же самая инъекция. Ну просто она будет не в данных, а в именах плейсхолдеров, а так всё то же самое.
Если составлять запрос динамически, то имена полей все равно должны быть заранее прописаны в скрипте. Например - в свойствах класса, если это класс.
Плюс постоянно приходилось отстаивать свою точку зрения
Лично мне это всегда помогает лучше её понять :)
В моё время в ходу была (шуточная) фраза:
Вот же какой тупой! Я уже сам всё понял, пока ему объяснял, а он всё никак.
Ещё, если говорить о фрилансе, там есть потолок в уровне задач и - следовательно - уровне развития. С одной стороны, работа на фрилансе дает хороший навык проджект-менеджмента. с другой- потолок заведомо ограничен проектами, в принципе поднимаемыми и сопровождаемыми в одно литсо.
Мне кажется, институтский опыт дает ответ на последний вопрос - не?
В принципе, отдельные таланты могут заниматься самообразованием, но среднему человеку легче с преподавателем/однокурсниками. Даже онлайн-курсы подразумевают какую-то интеракцию, разбор сделанных заданий. Изучение иностранного тоже обычно легче в интерактивном режиме чем по статичным материалам.
Ну ладно, возможно мы просто по-разному поняли задачу автора.
просто empty надо применять не вообще всегда, а только если ззаведомо известно, что переменная может не существовать.