php - do...while 循环迭代次数太多,while 循环迭代次数太少 - php

标签 php html mysql while-loop do-while

一段时间以来,我一直在为我自己和客户的许多网站构建图片库。它们是 MySQL 数据库驱动的,我使用带有 PHP 的 MySQLi 扩展,画廊有一个“画廊”页面和一个带有 jQ​​uery 灯箱的“缩略图”页面,用于在单击缩略图后提供最终图像。仅我的服务器上就有至少六个这样的画廊,对于每个新画廊,我都从我构建的最后一个画廊的代码库开始。

在使用准备好的语句选择结果后,我现有的每个画廊中的“画廊”页面都使用 do...while 循环来显示数据库中的所有画廊(通常是分页的)。在每种情况下,do...while 循环都会遍历所选记录并顺利显示数据。

然后我今天开始了一个新的画廊,并无中生有地提出了一个问题。我这样说是因为我使用了我的其他站点库之一的代码,并且该库运行良好。

详情:
galleries新数据库中的表有 7 列,其中一列是 type该列包含“照片”或“视频”一词。为了测试,数据库中有 5 个虚拟画廊,3 张照片和 2 个视频。该页面的默认设置是选择所有记录,除非单击“照片”或“视频”链接中的任何一个,在这种情况下,它们会传递一个查询字符串,并使用不同的选择查询来仅选择和显示照片或视频画廊。

查询代码(按需工作):

if (($gType != 'photo') && ($gType != 'video')) {
    $getGalleries = "SELECT gallery_id, gallery_type, gallery_thumb, gallery_part, gallery_name, gallery_about
    FROM galleries
    WHERE gallery_live = ?";
    $stmt = $conn->prepare($getGalleries);
    $stmt->bind_param('i', $live);
    $stmt->bind_result($id, $type, $thumb, $part, $name, $about);
    $stmt->execute();
    $stmt->store_result();
    $stmt->fetch;
} else {
    $getGalleries = "SELECT gallery_id, gallery_type, gallery_thumb, gallery_part, gallery_name, gallery_about
    FROM galleries
    WHERE gallery_type = ?
    AND gallery_live =?";
    $stmt = $conn->prepare($getGalleries);
    $stmt->bind_param('si', $gType, $live);
    $stmt->bind_result($id, $type, $thumb, $part, $name, $about);
    $stmt->execute();
    $stmt->store_result();
    $stmt->fetch();
}

以及带有 do...while 循环的 HTML/PHP:

<?php
do {
?>

<div class="galleries">
<div class="thumb_<?php echo $type; ?>">
<img src="graphics/<?php echo $type; ?>.jpg">
</div><!-- .thumb_photo / _video -->

<p class="about_title">
<?php echo $name; ?>
</p>

<p class="about_text">
<?php echo $about; ?>
</p>
</div><!-- .galleries -->

<?php       
} while ($stmt->fetch());
?>

我放了一个示例页面 HERE显示我遇到的问题。

所以打开页面会显示galleries的所有内容表,总共 5 个画廊。但是这次使用 do...while 循环,就像我在其他画廊中使用的那样,do...while 循环迭代了太多次,留下一个空的 <div>。和失踪 .jpg顶部的图像,然后 5 个画廊显示在它下面。单击“照片”或“视频”链接时,页面会重新加载并显示正确的图库,仅此而已。单击“全部”链接重新打开页面、所有 5 个画廊和额外的 <div>在顶部。当我将循环更改为 while 循环时,默认页面现在没有额外的 <div>这很好……但是当单击“照片”或“视频”链接时,它们分别提供的记录少了一条。

我整天都在为这个问题头疼。这并不是说我以前从未这样做过,但是你瞧,我现在遇到了这个神秘的问题。

同样,我已经多次使用这种技术,所以我必须遗漏一些简单的东西。任何帮助将不胜感激。谢谢!

更新: 我忘了提到一项。出于沮丧,我添加了一个查询来计算数据库中的条目数,结果是 5。这让我认为问题不是查询,而是代码中的问题。

最佳答案

我认为问题可能只是你有

$stmt->fetch;

在你的 if (($gType != 'photo') && ($gType != 'video')) { block 中,

你应该有的地方

$stmt->fetch();

关于php - do...while 循环迭代次数太多,while 循环迭代次数太少 - php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25373817/

相关文章:

php - xdebug 3 无法在 ubuntu 20.04 中使用 docker

html - 在背景图像下重复背景颜色

PHP按任意顺序排序

php - 分页不会跨页移动

html - 用自己的垂直滚动条分隔屏幕的 2 个区域

javascript - PHP-如何将 html 表格单元格值添加到 MYSQL 数据库

mysql - 从 SKU 获取永久链接

mysql - Git Bash mysql 空白

php - mysql关于html和php的问题

php - 如何让小书签弹出一个表单,将 URL 和标题提交给数据库以及评论