PHPでページ生成を作成するとき、データベースクエリが散らかっている一連のファイルを作成していることがよくあります。たとえば、次のように、投稿に関するデータをデータベースから直接フェッチしてページに表示するクエリがあるとします。
$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
これらの迅速な1回限りのクエリは通常は小さいですが、データベースのやり取りコードの大部分が結局乱雑に見えることがあります。
場合によっては、ポスト関連のdbクエリを処理する単純な関数ライブラリを作成し、コードのブロックを単純なものに短縮することで、この問題を解決しました。
$content = post_get_content($id);
そして、それは素晴らしいことです。または、少なくとも何か他のことをする必要があるまでです。たぶん、最新の5つの投稿をリストに表示する必要があります。ええと、いつでも別の関数を追加できます。
$recent_posts = post_get_recent(5);
foreach ($recent_posts as $post) { ... }
しかしSELECT *
、それは結局クエリを使用することになります。これは通常、とにかく必要はありませんが、しばしば複雑すぎて合理的に抽象化できません。最終的に私は、すべての単一のユースケースのデータベース相互作用関数の大規模なライブラリ、またはすべてのページのコード内の一連の乱雑なクエリのいずれかになります。そして、これらのライブラリを構築した後でも、以前に使用したことがない小さな結合を1つ実行する必要があることに気づき、その仕事を行うために、突然別の高度に専門化された関数を作成する必要があります。
確かに、一般的なユースケースや特定のやり取りのクエリに関数を使用することはできますが、生のクエリを書き始めるとすぐに、すべてに直接アクセスできるようになります。それとも、怠惰になって、MySQLクエリで直接実行する必要があるPHPループで処理を開始します。
インターネットアプリケーションの記述に詳しい方にお願いしたいと思います。コードの追加の行と、抽象化によって導入される可能性のある非効率性に見合う保守性の向上はありますか。それとも、直接クエリ文字列を使用するだけで、データベースの相互作用を処理するための許容できる方法ですか?
select
s を「ラップ」できます