Під час написання генерації сторінок у 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
s - si, вам доведеться викликати такі процедури лише з певними необхідними параметрами