【问题标题】:PDO while loop to reuse output templatePDO while循环重用输出模板
【发布时间】:2012-04-15 14:08:38
【问题描述】:

我正在尝试以这种方式使用 PDO 并重用输出模板:

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

用于从 $ordered=1 和 $shipped=1 开始执行的两个查询。 问题出在输出部分:

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

$selected_product_show 被 $shipped=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;}?>

知道如何实现吗?

【问题讨论】:

  • @YourCommonSense 真的吗?这是为什么?您可能必须重用 while 循环的完全相同的输出,但使用不同的正确 PDO 语句。想象一下,您必须输出 1,000 行输出,您将重复 3,000 行完全相同的内容,而不是 1,000 行。我实际上认为在这种情况下它更有效。
  • @YourCommonSense 那么你会怎么做呢?
  • 我会将我的业务逻辑(关于获取和准备数据)与显示逻辑(关于显示数据)分开。因此,PDO 将保留在业务逻辑部分,而仅将数据传递给模板。当然我会实现分页,每页只显示 100 行

标签: php mysql arrays pdo while-loop


【解决方案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);
}

这样的?

【讨论】:

  • 与新编辑完美配合!感谢您的帮助!
猜你喜欢
  • 2013-09-28
  • 2012-01-02
  • 2021-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-17
  • 1970-01-01
相关资源
最近更新 更多