如果mySQL行为空,是否else语句不返回任何值?

时间:2019-07-11 00:35:06

标签: php mysql

我正在使用带有评论系统的博客帖子页面创建一个社交媒体Web应用程序。在特定帖子上,我可以显示数据库中的所有行,具体取决于帖子ID。但是,如果没有与帖子ID相关的行,我想显示“无评论”的内容。如果没有任何行,我似乎无法弄清楚返回什么。

//Check if there are comments related to post via post id
function comment_exists($post_id, $conn){
   $sql = "SELECT * FROM post_comments WHERE post_id='$post_id'";
   $result = $conn->query($sql);

   if(mysqli_num_rows($result) >= 1){
      return true;
   }else{
      return false;
   }
}

////////////////////////////////////////////////////////////

$post_id = $_GET['id'];

$sql = $conn->query("SELECT * FROM post_comments WHERE post_id = '$post_id' ORDER BY id DESC");


while($row = $sql->fetch_object()){
   $comments[] = $row;
}
foreach($comments as $comment){
   if(comment_exists($post_id, $conn)){
      ?>
      <li class="list-group-item">
         <div class="h6 m-0">@<?php echo "$comment->username" ?></div>
         <div class="text-muted"> <i class="fa fa-clock-o mr-1"></i><?php echo "$comment->comment_time" ?></div>
         <p class="card-text"><?php echo "$comment->comment" ?></p>
      </li>
      <?php
   }else{
      echo 'No comments yet';
   }
}

我有2条帖子,一篇带有$ post_id = 14,带有0条评论,一篇带有$ post_id = 21,带有4条评论。

对于post_id = 21,它按预期显示4条注释。 对于post_id = 14,它将显示一个空白页面,而不是else语句中的“没有评论”

1 个答案:

答案 0 :(得分:0)

只需检查$comments是否为空。您无需每次都检查循环,因为如果没有注释,循环将不会运行。

if (empty($comments)) {
    echo "No comments yet";
} else {
    foreach ($comments as $comment) {
      ?>
      <li class="list-group-item">
         <div class="h6 m-0">@<?php echo "$comment->username" ?></div>
         <div class="text-muted"> <i class="fa fa-clock-o mr-1"></i><?php echo "$comment->comment_time" ?></div>
         <p class="card-text"><?php echo "$comment->comment" ?></p>
      </li>
      <?php
    }
}