Al escribir la generación de páginas en PHP, a menudo me encuentro escribiendo un conjunto de archivos llenos de consultas de bases de datos. Por ejemplo, podría tener una consulta para obtener algunos datos sobre una publicación directamente de la base de datos para mostrar en una 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
Estas consultas rápidas y únicas suelen ser pequeñas, pero a veces termino con grandes porciones de código de interacción de la base de datos que comienza a verse bastante desordenado.
En algunos casos, he resuelto este problema creando una biblioteca simple de funciones para manejar mis consultas de db relacionadas con la publicación, acortando ese bloque de código a un simple:
$content = post_get_content($id);
Y eso es genial. O al menos lo es hasta que necesite hacer algo más. Tal vez necesito obtener las cinco publicaciones más recientes para mostrar en una lista. Bueno, siempre podría agregar otra función:
$recent_posts = post_get_recent(5);
foreach ($recent_posts as $post) { ... }
Pero eso termina usando una SELECT *
consulta, que generalmente no necesito de todos modos, pero a menudo es demasiado complicado para abstraerlo razonablemente. Eventualmente termino con una biblioteca masiva de funciones de interacción de base de datos para cada caso de uso, o una serie de consultas desordenadas dentro del código de cada página. E incluso una vez que he creado estas bibliotecas, me veré obligado a hacer una pequeña unión que no había usado antes, y de repente necesito escribir otra función altamente especializada para hacer el trabajo.
Claro, podría usar las funciones para casos de uso general y consultas para interacciones específicas, pero tan pronto como empiezo a escribir consultas en bruto, empiezo a volver al acceso directo para todo. O eso, o me volveré vago y comenzaré a hacer cosas en bucles PHP que de todos modos deberían hacerse directamente en las consultas MySQL.
Me gustaría preguntarles a los que tienen más experiencia en la escritura de aplicaciones de Internet: ¿vale la pena el mantenimiento de las líneas de código adicionales y las posibles ineficiencias que pueden introducir las abstracciones? ¿O simplemente el uso de cadenas de consulta directa es un método aceptable para manejar las interacciones de la base de datos?
select
, solo tendrá que llamar a dichos procedimientos con algunos parámetros que necesite