Ao escrever a geração de páginas em PHP, muitas vezes me pego escrevendo um conjunto de arquivos repletos de consultas ao banco de dados. Por exemplo, eu posso ter uma consulta para buscar alguns dados sobre uma postagem diretamente do banco de dados para exibir em uma página, como esta:
$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
Essas consultas rápidas e únicas geralmente são pequenas, mas às vezes acabo com grandes partes do código de interação do banco de dados, que começa a parecer bastante confuso.
Em alguns casos, resolvi esse problema criando uma biblioteca simples de funções para lidar com minhas consultas db pós-relacionadas, encurtando esse bloco de código para um simples:
$content = post_get_content($id);
E isso é ótimo. Ou pelo menos é até eu precisar fazer outra coisa. Talvez eu precise exibir as cinco postagens mais recentes em uma lista. Bem, eu sempre poderia adicionar outra função:
$recent_posts = post_get_recent(5);
foreach ($recent_posts as $post) { ... }
Mas isso acaba usando uma SELECT *
consulta, da qual eu realmente não preciso, mas muitas vezes é muito complicado para ser razoavelmente abstrato. Acabo tendo uma biblioteca enorme de funções de interação com o banco de dados para cada caso de uso ou uma série de consultas confusas no código de cada página. E mesmo depois de criar essas bibliotecas, vou precisar fazer uma pequena junção que não havia usado antes e, de repente, preciso escrever outra função altamente especializada para fazer o trabalho.
Claro, eu poderia usar as funções para casos de uso gerais e consultas para interações específicas, mas assim que começo a escrever consultas brutas, começo a voltar ao acesso direto a tudo. Ou isso, ou ficarei preguiçoso e começarei a fazer coisas em loops PHP que realmente devem ser feitas diretamente nas consultas do MySQL.
Gostaria de perguntar aos mais experientes na criação de aplicativos da Internet: o aumento da capacidade de manutenção vale as linhas extras de código e as possíveis ineficiências que as abstrações podem apresentar? Ou simplesmente o uso de strings de consulta direta é um método aceitável para lidar com interações com o banco de dados?
select
s - si só vai ter que chamar esses procedimentos com alguns parâmetros que você precisa