Когда я пишу генерацию страниц на PHP, я часто пишу набор файлов, заполненных запросами к базе данных. Например, у меня может быть запрос на получение некоторых данных о записи непосредственно из базы данных для отображения на странице, например:
$statement = $db->prepare('SELECT * FROM posts WHERE id=:id');
$statement->bindValue(':id', $id, PDO::PARAM_INT);
$statement->execute();
$post = $statement->fetch(PDO::FETCH_ASSOC);
$content = $post['content']
// do something with the content
Эти быстрые одноразовые запросы обычно невелики, но иногда я получаю большие части кода взаимодействия с базой данных, который начинает выглядеть довольно грязно.
В некоторых случаях я решил эту проблему, создав простую библиотеку функций для обработки моих db-запросов, связанных с записями, сокращая этот блок кода до простого:
$content = post_get_content($id);
И это здорово. Или, по крайней мере, пока мне не нужно будет заняться чем-то другим. Может быть, мне нужно получить пять последних сообщений для отображения в списке. Ну, я всегда мог добавить еще одну функцию:
$recent_posts = post_get_recent(5);
foreach ($recent_posts as $post) { ... }
Но это заканчивается использованием SELECT *
запроса, который мне обычно действительно не нужен, но часто слишком сложен, чтобы его можно было резюмировать. В конечном итоге я получаю либо обширную библиотеку функций взаимодействия с базой данных для каждого отдельного варианта использования, либо серию грязных запросов внутри кода каждой страницы. И даже когда я построю эти библиотеки, мне понадобится сделать одно крошечное объединение, которое я раньше не использовал, и мне вдруг понадобится написать еще одну узкоспециализированную функцию для выполнения этой работы.
Конечно, я мог бы использовать функции для общих случаев использования и запросов для конкретных взаимодействий, но как только я начинаю писать необработанные запросы, я начинаю возвращаться к прямому доступу для всего. Либо так, либо я стану ленивым и начну делать циклы PHP, которые действительно должны выполняться непосредственно в запросах MySQL.
Я хотел бы спросить тех, кто более опытен в написании интернет-приложений: стоит ли повышение удобства обслуживания дополнительными строками кода и возможными недостатками, которые могут вносить абстракции? Или просто использование прямых строк запроса является приемлемым методом для обработки взаимодействий с базой данных?
select
- вам нужно будет вызывать такие процедуры только с некоторыми необходимыми параметрами