2012-04-01 4 views
0

を再利用するwhileループ:PDO私はこのようにPDOを使用して、出力テンプレートを再利用しようとしている出力テンプレート

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

は、両方の$ = 1注文以降に実行される2つのクエリのために使用されます& $が出荷された= 1。 問題は、出力セクションにあります。

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

の$ selected_product_showは$ = 1出荷秒ループによって上書きされます。どのようにして正しいクエリーを引き出すことができますか(同じ出力テンプレートを再利用している間に、ループ中のループ全体で)正しいループを正しいループに貼り付けますか?

$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ステートメントで再利用する必要があるかもしれません。 1,000行の出力を出力しなければならないとしたら、1000行ではなく3000行の同じ正確な行が繰り返されるとします。私は実際にこのような状況でより効率的だと思っています。 – Maverick

+0

@ YourCommonSenseだから、どうやってそれをやっていくの? – Maverick

+0

私は表示ロジック(データの表示について)からビジネスロジック(データの取得と準備について)を分離したいと思います。したがって、PDOはビジネスロジック部分に残り、データのみをテンプレートに渡します。もちろん、私はページごとに100行しか表示しないようにページ分割を実装します –

答えて

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

+0

ようこそ。) – egis

関連する問題