Quando scrivo la generazione di pagine in PHP, mi ritrovo spesso a scrivere una serie di file disseminati di query sul database. Ad esempio, potrei avere una query per recuperare alcuni dati su un post direttamente dal database per visualizzarli su una pagina, in questo modo:
$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
Queste query rapide e una tantum sono in genere piccole, ma a volte finisco con grandi porzioni di codice di interazione del database che inizia a sembrare piuttosto disordinato.
In alcuni casi, ho risolto questo problema creando una semplice libreria di funzioni per gestire le mie query db post-correlate, abbreviando quel blocco di codice in un semplice:
$content = post_get_content($id);
Ed è fantastico. O almeno lo è fino a quando devo fare qualcos'altro. Forse ho bisogno di ottenere i cinque post più recenti da visualizzare in un elenco. Bene, potrei sempre aggiungere un'altra funzione:
$recent_posts = post_get_recent(5);
foreach ($recent_posts as $post) { ... }
Ma questo finisce per usare una SELECT *
query, che di solito in realtà non mi serve, ma spesso è troppo complicata per essere ragionevolmente astratta. Alla fine finisco con una vasta libreria di funzioni di interazione del database per ogni singolo caso d'uso, o una serie di domande disordinate all'interno del codice di ogni pagina. E anche una volta che avrò creato queste librerie, mi ritroverò a dover fare un piccolo join che non avevo mai usato prima e improvvisamente ho bisogno di scrivere un'altra funzione altamente specializzata per fare il lavoro.
Certo, potrei usare le funzioni per casi di uso generale e query per interazioni specifiche, ma non appena inizio a scrivere query non elaborate inizio a tornare all'accesso diretto per tutto. O quello, o diventerò pigro e inizierò a fare cose nei loop di PHP che dovrebbero davvero essere fatte direttamente nelle query MySQL, comunque.
Vorrei chiedere a coloro che hanno più esperienza con la scrittura di applicazioni Internet: l'incremento della manutenibilità vale le righe extra di codice e le possibili inefficienze che le astrazioni possono introdurre? Oppure usare semplicemente stringhe di query dirette è un metodo accettabile per gestire le interazioni con il database?
select
- devi solo chiamare tali procedure con alcuni parametri di cui hai bisogno