2012-04-01 8 views
0

我想以這種方式來使用PDO和重用輸出模板:PDO while循環再利用輸出模板

selected_products_show .= '<div class="'.$product_id.'">'.$product_name.'</div>'; 

用於將因爲兩個$下令= 1來執行這兩個查詢& $ shipped = 1。 問題是在輸出部分:

<?php if ($ordered == 1) { echo $selected_products_show;}?> 
<?php if ($shipped == 1) { echo $selected_products_show;}?> 

$ selected_product_show得到第二回路,其中$運= 1改寫了。我怎樣才能得到正確的查詢(現在發生),並將正確的循環與正確的變量顯示相結合(全部使用while循環,而重用相同的輸出模板)?

下面是代碼:

$ordered = 1; 
$shipped = 1; 

if ($ordered == 1) { 
$queryEnd = "WHERE product_id IN (?,?,?)"; 
} 
if ($shipped == 1) { 
$queryEnd = "ORDER BY product_id DESC LIMIT 5"; 
} 

$query = "SELECT product_id, product_name FROM products $queryEnd"; 

if ($ordered == 1) { 
$ordered_products = array(1,2,3); 
$selected_products = $dbh->prepare($query); 
$selected_products->execute($ordered_products); 
} 
if ($shipped == 1) { 
$selected_products = $dbh->prepare($query); 
$selected_products->execute(); 
} 

while($row = $selected_products->fetch(PDO::FETCH_ASSOC)){ 
    $product_id = $row["product_id"]; 
    $product_name = $row["product_name"]; 
    $selected_products_show .= '<div class="'.$product_id.'">'.$product_name.'</div>'; 
} 

<?php if ($ordered == 1) { echo $selected_products_show;}?> 
<?php if ($shipped == 1) { echo $selected_products_show;}?> 

任何想法,這可怎麼實現的?

+0

@YourCommonSense真的嗎?這是爲什麼?您可能必須重複使用while循環中的相同確切輸出,但使用不同的正確PDO語句。想象一下,你必須輸出1000行的輸出,你會有3000行重複相同的事情,而不是1000。我實際上認爲它在這種情況下更有效率。 – Maverick 2012-04-02 15:35:35

+0

@YourCommonSense那麼你會如何去做呢? – Maverick 2012-04-02 15:44:20

+0

我將顯示邏輯(關於顯示數據)的業務邏輯(關於獲取和準備數據)分開。因此,PDO將保留在業務邏輯部分,同時只將數據傳遞到模板中。當然我會實現分頁,每頁僅顯示100行 – 2012-04-02 16:01:52

回答

1
function templating($selected_products){ 
    $selected_products_show = ''; 
    while($row = $selected_products->fetch(PDO::FETCH_ASSOC)){ 
     $product_id = $row["product_id"]; 
     $product_name = $row["product_name"]; 
     $selected_products_show .= '<div class="'.$product_id.'">'.$product_name.'</div>'; 
    } 
return $selected_products_show; 
} 

$ordered = 1; 
$shipped = 1; 
$queryMAIN = "SELECT product_id, product_name FROM products"; 

if ($ordered == 1) { 
    $query = $queryMAIN." WHERE product_id IN (?,?,?)"; 
    $ordered_products = array(1,2,3); 
    $selected_products = $dbh->prepare($query); 
    $selected_products->execute($ordered_products); 
    echo templating($selected_products); 
} 

if ($shipped == 1) { 
    $query= $queryMAIN." ORDER BY product_id DESC LIMIT 5"; 
    $selected_products = $dbh->prepare($query); 
    $selected_products->execute(); 
    echo templating($selected_products); 
} 

是這樣的嗎?

+0

與新的編輯完美匹配!感謝egis的幫助! – Maverick 2012-04-02 16:01:27

+0

不客氣;) – egis 2012-04-06 23:42:51