Beim Schreiben der Seitengenerierung in PHP schreibe ich häufig eine Reihe von Dateien, die mit Datenbankabfragen übersät sind. Beispielsweise könnte ich eine Abfrage haben, um einige Daten zu einem Beitrag direkt aus der Datenbank abzurufen und auf einer Seite anzuzeigen, wie folgt:
$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
Diese schnellen, einmaligen Abfragen sind normalerweise klein, aber manchmal habe ich große Teile des Datenbank-Interaktionscodes, der ziemlich chaotisch aussieht.
In einigen Fällen habe ich dieses Problem gelöst, indem ich eine einfache Funktionsbibliothek für meine postbezogenen Datenbankabfragen erstellt und diesen Codeblock auf ein einfaches gekürzt habe:
$content = post_get_content($id);
Und das ist großartig. Zumindest ist es so lange, bis ich etwas anderes tun muss. Vielleicht muss ich die fünf neuesten Beiträge in einer Liste anzeigen lassen. Nun, ich könnte immer eine andere Funktion hinzufügen:
$recent_posts = post_get_recent(5);
foreach ($recent_posts as $post) { ... }
Aber das endet mit einer SELECT *
Abfrage, die ich normalerweise sowieso nicht brauche, die aber oft zu kompliziert ist, um einigermaßen abstrakt zu sein. Am Ende habe ich entweder eine riesige Bibliothek mit Datenbankinteraktionsfunktionen für jeden einzelnen Anwendungsfall oder eine Reihe unordentlicher Abfragen im Code jeder Seite. Und selbst wenn ich diese Bibliotheken erstellt habe, muss ich einen winzigen Join ausführen, den ich zuvor noch nicht verwendet habe, und plötzlich muss ich eine weitere hochspezialisierte Funktion schreiben, um die Aufgabe zu erledigen.
Sicher, ich könnte die Funktionen für allgemeine Anwendungsfälle und Abfragen für bestimmte Interaktionen verwenden, aber sobald ich anfange, Rohabfragen zu schreiben, schlüpfe ich für alles wieder in den direkten Zugriff. Entweder das, oder ich werde faul und fange an, Dinge in PHP-Schleifen zu tun, die eigentlich direkt in den MySQL-Abfragen erledigt werden sollten.
Ich möchte diejenigen fragen, die mehr Erfahrung mit dem Schreiben von Internetanwendungen haben: Lohnt sich die Erhöhung der Wartbarkeit für die zusätzlichen Codezeilen und möglichen Ineffizienzen, die durch die Abstraktionen entstehen können? Oder ist die Verwendung direkter Abfragezeichenfolgen eine akzeptable Methode für den Umgang mit Datenbankinteraktionen?
select
s - si zu "wickeln". Sie müssen solche Prozeduren nur mit einigen Parametern