Lors de l'écriture de la génération de pages en PHP, je me retrouve souvent à écrire un ensemble de fichiers jonché de requêtes de base de données. Par exemple, je pourrais avoir une requête pour récupérer des données sur un poste directement à partir de la base de données pour les afficher sur une page, comme ceci:
$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
Ces requêtes rapides et ponctuelles sont généralement petites, mais je me retrouve parfois avec de grandes parties de code d'interaction de base de données qui commencent à sembler assez désordonnées.
Dans certains cas, j'ai résolu ce problème en créant une simple bibliothèque de fonctions pour gérer mes requêtes db liées à un post, raccourcissant ce bloc de code en un simple:
$content = post_get_content($id);
Et c'est super. Ou du moins, c'est jusqu'à ce que je doive faire autre chose. Peut-être que je dois afficher les cinq articles les plus récents dans une liste. Eh bien, je pourrais toujours ajouter une autre fonction:
$recent_posts = post_get_recent(5);
foreach ($recent_posts as $post) { ... }
Mais cela finit par utiliser une SELECT *
requête, dont je n'ai généralement pas vraiment besoin de toute façon, mais qui est souvent trop compliquée pour être raisonnablement abstraite. Je me retrouve finalement avec soit une bibliothèque massive de fonctions d'interaction de base de données pour chaque cas d'utilisation unique, soit une série de requêtes compliquées à l'intérieur du code de chaque page. Et même une fois que j'ai construit ces bibliothèques, je devrai faire une petite jointure que je n'avais pas utilisée auparavant, et j'ai soudainement besoin d'écrire une autre fonction hautement spécialisée pour faire le travail.
Bien sûr, je pourrais utiliser les fonctions pour les cas d'utilisation généraux et les requêtes pour des interactions spécifiques, mais dès que je commence à écrire des requêtes brutes, je commence à revenir en accès direct pour tout. Soit ça, soit je deviens paresseux et je vais commencer à faire des choses dans les boucles PHP qui devraient vraiment être faites directement dans les requêtes MySQL, de toute façon.
Je voudrais demander à ceux qui sont plus expérimentés dans l'écriture d'applications Internet: le boost de maintenabilité vaut-il les lignes de code supplémentaires et les éventuelles inefficacités que les abstractions peuvent introduire? Ou est-ce que l'utilisation de chaînes de requête directes est une méthode acceptable pour gérer les interactions avec la base de données?
select
- si vous n'aurez qu'à appeler de telles procédures avec certains paramètres dont vous avez besoin