2012-02-22 3 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 함수를 사용하면 코드가 항상 지루하고 지루하고 반복적입니다. 하나의 쿼리를 실행하려면 다섯 줄을 가져 가야합니다!
단 한 줄로 더 좋을 것이라고 생각하지 않습니까? 라인은 의미가있는 연산자로 구성되어 있습니까?

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

.2. 알고리즘을 위해서는 꽤 괜찮습니다.
* 이 아니고은 모든 데이터베이스에서 반복되지만 페이지 당 10-20 개의 게시물 만 요청하면 추가로 10-20 기본 키 기반 조회가 응용 프로그램을 많이 늦추지는 않습니다.

.3. 보너스 트랙.
정말로 고려하고 싶은 것은 "비즈니스 로직/프리젠 테이션 로직 분리"입니다. 왜 모든 데이터를 먼저 얻지 않고 출력을 시작하는 것일까 요? 코드를 더 깨끗하게 만들 것입니다.

관련 문제