一段时间以来,我一直在为我自己和客户的许多网站构建图片库。它们是 MySQL 数据库驱动的,我使用带有 PHP 的 MySQLi 扩展,画廊有一个“画廊”页面和一个带有 jQuery 灯箱的“缩略图”页面,用于在单击缩略图后提供最终图像。仅我的服务器上就有至少六个这样的画廊,对于每个新画廊,我都从我构建的最后一个画廊的代码库开始。
在使用准备好的语句选择结果后,我现有的每个画廊中的“画廊”页面都使用 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/