Всегда ли нужен подготовленный запрос в PHP?
Я так понимаю, что речь о статических запросах вида SELECT * FROM catalog WHERE parent=1
Такие запросы через prepare прогонять не обязательно.
НО, при этом очень желательно, чтобы запросы выполнялись через некое единое API, основанное на подготовленных выражениях, и программист внутри себя не ломал голову - использовать или нет. Использовать. Польза от такого решения на порядки перекрывает любые возможные плюсы других решений.
Пример:$categories = $db->getAll("SELECT * FROM catalog WHERE parent=1");
$categories = $db->getAll("SELECT * FROM catalog WHERE parent=?i", $parent);
Как видим, при наличии единого API для выполнения запросов, у программиста не возникает ненужных вопросов.
Филосовский вопрос. В идеале было бы хорошо если бы вообще все запросы строились через какой-то интерфейс, а ескейпилось и препейрилось все на уровне реализации того, что за этим интерфейсом. Но по-моему еще ни в одной системе моделей не придумали универсальный синтаксис для запросов любой сложности с кучей скобок и операторов, поэтому везде (вроде) предоставляется возможность писать в сыром виде. А раз так, то запросы с заведомо безопасными данными можно сырыми и писать как есть. Хотя бы просто чтобы сократить писанину. Но если так писать, то только такие запросы, чтобы сам такой запрос своим видом однозначно говорил что для него не требуется обезвреживание. Это я для себя так придумал, не знаю как бы другие программисты это поняли глядя в мой код. Соглашений таких вроде бы нет.