如果 mysqli_fetch_assoc 为空而循环 php 则显示一些 html

Display some html if mysqli_fetch_assoc is empty while loop php

我正在使用 while loop 从我想显示的数据库中获取数据,就像没有找到结果一样,结果为 null 或空。我试过将 if/else 与 like: if (empty($jobs)) echo 'nothing found'; 一起使用,但没有用。 if(!mysqli_fetch_assoc($jobs)) 有效,但如果可用则不显示职位。

循环

  <?php while ($job = mysqli_fetch_assoc($jobs)) { ?>
  <tr class="custom-table-body-titles">
    <td><?php echo h($job['updated_at']); ?></td>
    <td>
      <a href="#" class="text-dark"><?php echo h($job['title']); ?></a>
    </td>                
    <td>0/<?php echo h($job['required_freelancers']); ?></td>
    <td><?php echo h($job['delivery_time']); ?> Days</td>
    <td>$<?php echo h($job['budget']); ?></td>
    <td>
      <a href="job_details.html" class="btn btn-sm btn-primary">Apply</a>
    </td>
  </tr>
  <?php } ?>

在开始循环之前,您必须进行验证以检查是否找到任何结果。假设 $jobs 是由 mysqli_query().

返回的 mysqli_result 的实例
if (mysqli_num_rows($jobs) > 0)
{
    // your while loop
}
else
{
    echo "no jobs found";
}

您应该尽可能将 PHP 和 HTML 分开。

您可以先将所有结果提取到一个数组中,然后再对该数组进行 foreach。

$jobs = $jobs->fetch_all(MYSQLI_ASSOC);

if($jobs) {
    foreach ($jobs as $job) {
    }
} else { 
}

一个很好的问题,但遗憾的是大部分时间都回答不正确。

混合数据库相关代码和 HTML 代码是一种非常糟糕的做法。永远不应该有这样的 while 循环。

相反,应该将数据提取到数组中,

$jobs = [];
while ($row = mysqli_fetch_assoc($jobs)) {
    $jobs[] = $row;
}

然后用于输出数据。一旦你有了这个数组,你就可以用它来判断查询是否返回了任何数据:

<?php if ($jobs) { ?>
  <?php foreach ($jobs as $job) { ?>
  <tr class="custom-table-body-titles">
    <td><?php echo h($job['updated_at']); ?></td>
    <td>
      <a href="#" class="text-dark"><?php echo h($job['title']); ?></a>
    </td>                
    <td>0/<?php echo h($job['required_freelancers']); ?></td>
    <td><?php echo h($job['delivery_time']); ?> Days</td>
    <td>$<?php echo h($job['budget']); ?></td>
    <td>
      <a href="job_details.html" class="btn btn-sm btn-primary">Apply</a>
    </td>
  </tr>
  <?php } ?>
<?php } else {?>
    no data
<?php } ?>