2012-02-22 6 views
0

私は最終的にPHPのPDOを使うことを学ぶことにより、2012年のPHPを更新することにしました。これまでのところすべてがうまくいっていますが、私がそれについて行う方法が本当にそれを実行する最良の方法かどうかは分かりません。PHP PDO:私のPHPはより洗練された/より効率的なものになりますか?

この例では、データベースにクエリを送信して、ユーザーが行った投稿を表示し、各投稿に対して2つのコメントを表示しています。だから私がやっていることは、自分の投稿をつかみ、それをループして、そのループの中で、すべての投稿の上位2つのコメントをデータベースに照会することです。しかし、私は周りを走り回り、この一年を使い始める前に、これを行うもっとクリーンな方法があるかどうかを確かめました。

誰かがこの小さなコードブロックを見渡し、もっとクリーンで効率的な方法があれば教えてください。本当に感謝しています。ニットを自由に感じてください!

<?php 
$hostname = 'localhost'; 
$username = 'root'; 
$password = 'root'; 
$database = 'database'; 
try { 
    $dbh = new PDO("mysql:host=$hostname;dbname=$database", $username, $password); 
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

//Get Posts 
    $stmt = $dbh->prepare("SELECT * FROM posts"); 
    $stmt->execute(); 
    $result = $stmt->fetchAll(); 
    } 
catch(PDOException $e) 
    { 
    echo $e->getMessage(); 
    } 

//Loop through each post 
foreach($result as $row) { 

echo $row['post']; 

//Get comments for this post 
    $pid = $row['id']; 
    $stmt = $dbh->prepare("SELECT * FROM comments WHERE pid = :pid LIMIT 2"); 
    $stmt->bindParam(':pid', $pid, PDO::PARAM_STR); 
    $stmt->execute(); 
    $c_result = $stmt->fetchAll(); 

//Loop through comments 
foreach($c_result as $com) { 

echo $com['comment']; 

    } 
} 
//Close connection 
$dbh = null; 
?> 
+2

もっと効率的です。抽象的な効率性はありません。あなたがそれを書き直す必要はなく(そしてあなたの時間を無駄にしないので)、最も効率的なソリューションが、見える時点から、機能するソリューションです。それは数えますか? – zerkms

+0

http://codereview.stackexchange.com/ –

+0

より良い回答が得られるかもしれません。http://codereview.stackexchange.com/ – dan

答えて

3

実際には2つの質問です。

.1。 コードを使用している場合、かなり醜いです。生のAPI関数を使用すると、コードは常に退屈で退屈で反復的になります。 1つのクエリを実行するだけで、5行になりました!
あなたはただ1つの線が良いと思いませんか?行は意味のあるオペレータで構成されていますか?

$comments = $db->getAll("SELECT * FROM comments WHERE pid = :pid LIMIT 2",$row['id']); 

.2。アルゴリズムについては、それはかなり大丈夫です。
であると仮定すると、はすべてのデータベースをループしますが、ページあたり10-20個の投稿のみを要求します。さらに、10-20 プライマリキーベースの検索では、アプリケーションが大幅に遅くなることはありません。

.3。ボーナストラック。
本当に考慮したいことは、「ビジネスロジック/プレゼンテーションロジック分離」です。なぜあなたのすべてのデータを最初に取得するのではなく、出力を開始するだけですか?コードをもっときれいにするでしょう。

関連する問題