【问题标题】:PHP MySqli Multiple query & while in one page - help to simplifying codePHP MySqli 多查询 & 在一页中 - 有助于简化代码
【发布时间】:2016-05-22 04:58:54
【问题描述】:

我正在关注 PHP 官方手册:http://php.net/manual/es/mysqli-result.fetch-assoc.php

到目前为止,我的代码如下,但我不确定我是否做对了,因为我在同一页面上使用了许多“查询”和“同时”,我想知道是否有可能将所有 PHP 放在代码的开头并在 HTML 中调用带有“回声”的变量,而不必一直打开和关闭 PHP,这可以帮助我简化此代码以供输入,但它是正确的或这是否“好”在正常范围内继续。提前致谢!

<?php 
  require_once("inc/header.php");

  $connect = new mysqli("localhost", "user", "pass", "db_name");
  if ($connect->connect_errno) {
    printf("Error: %s", $connect->connect_error);
    exit();
  }
?>
<!-- *************** show products *************** -->
<div class="container">
 <div class="row">    
<?php
  $query = "SELECT * FROM product";
  if ($result = $connect->query($query)) {
  while ($row = $result->fetch_assoc()) {
?>
  <div class="col-xs-6 col-sm-4 col-md-3 col-lg-3">
   <div class="thumbnail">
    <a href="product.php?id=<?php echo $row['product_id']; ?>"><img src="<?php echo $row['product_img']; ?>" alt="<?php echo $row['product_name']; ?>"></a>
     <div class="caption">
      <a href="product.php?id=<?php echo $row['product_id']; ?>"><h6 class="truncate"><?php echo $row['product_name']; ?></h6></a>
      <h5><?php echo "$".$row['product_price']; ?></h5>
     </div>
   </div>
  </div>    
<?php
  }
  $result->free();
  }
?>
 </div>
</div>

<!-- *************** Latest 10 products... *************** -->
<div class="container">
 <div class="row">    
<?php
  $query = "SELECT * FROM product ORDER BY product_id DESC LIMIT 10";
  if ($result = $connect->query($query)) {
  while ($row = $result->fetch_assoc()) {
?>
  <div class="col-xs-6 col-sm-4 col-md-3 col-lg-3">
   <div class="thumbnail">
    <a href="product.php?id=<?php echo $row['product_id']; ?>"><img src="<?php echo $row['product_img']; ?>" alt="<?php echo $row['product_name']; ?>"></a>
     <div class="caption">
      <a href="product.php?id=<?php echo $row['product_id']; ?>"><h6 class="truncate"><?php echo $row['product_name']; ?></h6></a>
      <h5><?php echo "$".$row['product_price']; ?></h5>
     </div>
   </div>
  </div>    
<?php
  }
  $result->free();
  }
?>
 </div>
</div>

<!-- *************** Show the categories list... *************** -->
<?php
  $query = "SELECT * FROM categories";
  if ($result = $connect->query($query)) {
  while ($row = $result->fetch_assoc()) {
  ?>
  <ul>
    <li><a href="categories.php?id=<?php echo $row['categories_id']; ?>"><?php echo $row['categories_name']; ?></a></li>
  </ul>    
  <?php
  }
  $result->free();
  }
  $connect->close();
?>

<?php require_once("inc/footer.php");?>

【问题讨论】:

    标签: php mysql html mysqli


    【解决方案1】:

    我建议使用一个名为 meekrodb 的库,一旦加载,您就可以进行这样的查询

    $news = DB::query("SELECT id,title WHERE title = %s","Title you want");
    foreach ($news as $new) {
    echo $new["title"];
    }
    

    在一个页面上执行太多查询是完美的。您可以从MeekroDB.com合法免费下载

    【讨论】:

    • 完美,现在我开始阅读,这将有助于简化代码!
    • 我有一个提案正在观看,我很喜欢它,它让事情变得更容易,我确信我的项目中会实施。
    • 太棒了!当然,既然我发现了那个库,代码就更干净了。
    【解决方案2】:

    您所做的在技术上没有任何问题。您可以尝试将 2 个查询与您的“产品”表结合起来,从而节省数据库查询,但这不是问题,除非您的网站或数据库很忙。

    如果您想“简化”您的调用,您可以将 then 转换为函数并使用这些函数的结果来绘制 HTML,但是您必须将它们拉入内存并在数组上运行。

    【讨论】:

    • 我很高兴读到这篇文章,我想知道在哪里可以找到有关函数的文档,因为它可以尝试一些新的东西(我喜欢尽可能短且有序的代码),但至少我可以继续这个方法,如果我不花很长时间,你可以给我一个函数的例子吗?
    【解决方案3】:

    您的“类别”部分似乎正在为每个项目编写一个新的 ul 标记? 您应该将 ul 标记移到该段 php 之外。

    【讨论】:

    • 如果正确,尽量做最基本的例子,但不要考虑,谢谢!
    【解决方案4】:

    您的代码没有问题,但如果您想简化它,您可以稍微简化一下,因为您在 2 个不同的查询(显示产品和最新的 10 个产品)上执行几乎相同的任务。您可以将这些查询保存在字符串数组中,启动 foreach 循环并合并代码。

    这看起来像:

    <?php
    $ProductQueries = array("SELECT * FROM product", "SELECT * FROM product ORDER BY product_id DESC LIMIT 10");
    
    foreach ($ProductQueries as $ProductQuery)
    {
    ?>
    <div class="container">
    <div class="row">    
    <?php
      $query = $ProductQuery;
      if ($result = $connect->query($query)) {
      while ($row = $result->fetch_assoc()) {
    ?>
      <div class="col-xs-6 col-sm-4 col-md-3 col-lg-3">
       <div class="thumbnail">
        <a href="product.php?id=<?php echo $row['product_id']; ?>"><img src="<?php echo $row['product_img']; ?>" alt="<?php echo $row['product_name']; ?>"></a>
         <div class="caption">
          <a href="product.php?id=<?php echo $row['product_id']; ?>"><h6 class="truncate"><?php echo $row['product_name']; ?></h6></a>
          <h5><?php echo "$".$row['product_price']; ?></h5>
         </div>
       </div>
      </div>    
    <?php
    }
    $result->free();
    }
    ?>
     </div>
    </div>
    <?
    }
    ?>
    

    【讨论】:

    • 非常感谢,这就是我正在看的我的学习者,现在我将阅读您对掌握新事物的建议!感谢您的宝贵时间!
    • 很高兴帮助您,如果这是您问题的答案,请将其标记为已接受的答案:)
    • 当然,我正在阅读所有答案以了解您可以实现什么!问候!
    【解决方案5】:

    实际上,您编写精美代码的方式是正确的。你问的是MVC

    这个想法是分离逻辑和接口。有很多用于 PHP 的生产就绪模板引擎,例如 Smarty 或 Twig。您可以进一步了解它们并决定哪一个更适合您的需求。甚至创建自己的引擎。

    它们都很简单。您创建代码,收集页面上所需的所有数据,然后将此数据传递给模板引擎,模板引擎根据所选模板显示它,并使用简化的模板引擎语法编写。比如:

    <?php 
    
      require_once("template_engine.php");
      require_once("inc/header.php");
    
      $connect = new mysqli("localhost", "user", "pass", "db_name");
      if ($connect->connect_errno) {
        printf("Error: %s", $connect->connect_error);
        exit();
      }
    
      $products = array();
      $query = "SELECT * FROM product";
      if ($result = $connect->query($query)) {
      while ($row = $result->fetch_assoc()) {
        $products[] = $row;
      }
    
      $latest = array();
      $query = "SELECT * FROM product ORDER BY product_id DESC LIMIT 10";
      if ($result = $connect->query($query)) {
      while ($row = $result->fetch_assoc()) {
        $latest[] = $row;
      }
    
      $categories = array();
      $query = "SELECT * FROM categories";
      if ($result = $connect->query($query)) {
      while ($row = $result->fetch_assoc()) {
        $categories[] = $row;
      }
    
      echo $parser->parse_my_template("templatename.tpl", array(
          "products" => $products,
          "latest" => $latest,
          "categories" => $categories
        ));
    ?>
    

    并单独文件templatename.tpl(例如,在twigg语法中):

      ...
    
      {% for product in products %}
      <div class="col-xs-6 col-sm-4 col-md-3 col-lg-3">
       <div class="thumbnail">
        <a href="product.php?id={{ product.id }}"><img src="{{ product.image }}" alt="{{ product.name }}"></a>
         <div class="caption">
          <a href="product.php?id={{ product.id }}"><h6 class="truncate">{{ product.name }}</h6></a>
          <h5>{{ product.price }}</h5>
         </div>
       </div>
      </div>    
      {% endfor %}
    
      .....
    

    【讨论】:

    • 非常感谢您的回答,现在我开始学习基础知识了! Pensare 和学习了一个框架后哈哈
    • 我很高兴看到这段代码,但是如果不安装 smarty 或其他东西就无法工作,对吗? Smarty 见过,但现在我觉得很难,如果不依赖其他工具,使用此代码或类似的东西会很棒。
    • Smarty 不是这里唯一的变体。只需谷歌“php模板引擎” - 有数百个。
    • 但是如果您根本不想使用任何其他工具 - 除了打开和关闭 php 标签之外别无他法。至少您可以将所有回显代码放在脚本底部并使用 ... echo $product['image'] ?> .... } ?> 输出数据数组。这看起来会更干净一些。但只有一点……
    • 我明白了,非常感谢您的澄清!问候!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多