而循环可以';不能用两次吗?PHP

而循环可以';不能用两次吗?PHP,php,html,loops,Php,Html,Loops,我是PHP新手,希望有人能帮助我。我在mysql数据库中有一个包含“id”、“img”、“link”和“desc”的表。我希望它能像这样呼应出来: <div id="featured"> <a target='_blank' href='link'><img src='image link1' title='description'/></a> <a target='_blank' href='link'><

我是PHP新手,希望有人能帮助我。我在mysql数据库中有一个包含“id”、“img”、“link”和“desc”的表。我希望它能像这样呼应出来:

    <div id="featured">
    <a target='_blank' href='link'><img src='image link1' title='description'/></a>
    <a target='_blank' href='link'><img src='image link2' title='description'/></a>
    <a target='_blank' href='link'><img src='image link3' title='description'/></a>
    <a target='_blank' href='link'><img src='image link4' title='description'/></a>
    </div>
    <div id="cap">
    <span class='desc' id='idnumber'>Description1</span>
    <span class='desc' id='idnumber'>Description2</span>
    <span class='desc' id='idnumber'>Description3</span>
    <span class='desc' id='idnumber'>Description4</span>
    </div>

说明1
说明2
说明3
说明4
PHP代码:

<?php
  require_once "./dbconfig.php";
  opendb();
  $sql = "SELECT * FROM images ORDER BY id DESC"; 
  $query = querydb($sql);
?>
<div id="featured"> 
<?php
  while($row = mysql_fetch_array( $query )){
    echo "<a target='_blank' href='$row[link]'><img src='$row[img]' title='$row[desc]'/></a>";
  }
?>
</div>
<div id="cap">
<?php
  while($row = mysql_fetch_array( $query )){
    echo "<span class='desc' id='$row[id]'>$row[desc]</span>";
  }
closedb();
?>
</div>


mysql\u fetch\u数组的文档中

返回与获取的行相对应的数组,并将内部数据指针向前移动

当您尝试使用第二个while循环时,内部数据点仍在末尾。您没有做任何重置操作


您可以在第二个while循环之前使用此选项将其移回起始位置

mysql_data_seek($query,0);

mysql\u fetch\u array
将为空,因为您已经从数据库中获取了所有行。您需要使用
mysql\u data\u seek
重置指针

<?php
mysql_data_seek( $query, 0 );
while($row = mysql_fetch_array( $query )){
echo "<span class='desc' id='$row[id]'>$row[desc]</span>";
}
... rest of code
数据库引用(
$query
)充当指向下一条未读记录的指针;调用
mysql\u fetch\u array()
时,它会获取指向的记录,并将指针移动到下一个位置

因此,在遍历所有记录之后,指针将指向记录集的末尾,因此当您请求下一条记录时,它将返回
false
。完成循环不会对指针做任何其他事情;它仍然指向记录集的末尾

因此,您需要做的是重置指向数据集开头的指针,然后才能再次循环遍历它

这样做的功能是

因此,在第二个循环之前,您需要立即执行以下代码行:

mysql_data_seek($query, 0);

希望对您有所帮助。

使用
mysql\u fetch\u array()
您将一步一步地查看结果,直到结束。或者正如PHP文档所说:

返回对应于的数组 获取的行并移动内部 数据指针在前面

这意味着,你需要从新开始。因此,在第二次使用之前使用此选项,同时:

mysql_data_seek($query,0);

您可以使用
while
两次,但请参见:

它告诉PHP重复执行嵌套语句,只要while表达式的计算结果为TRUE

一旦mysql\u fetch\u数组没有更多的行要提取,它将在每次后续调用中返回false-因此您的第一个
while
循环将停止循环,因为表达式
mysql\u fetch\u数组($query)
为false;由于第二个
while
中的表达式是相同的,因此该循环将永远不会执行(因为表达式的计算结果为
false

操作方法:如果要多次循环结果,我建议先将结果行存储到数组中,然后循环它们。简化示例:

$results = Array();
while ($row = mysql_fetch_rows($query)) {
  $results[] = $row;
}

foreach ($results as $row) {
  echo $row['something'];
}

第一个循环已经消耗了mysql中的所有数据,因此第二个循环中没有任何内容。您可以将行数据存储在数据库中,然后重新使用该存储

<div id="featured"> 
<?php
$rows = array();
while($row = mysql_fetch_array( $query )){
  $rows[] = $row;
  echo "<a target='_blank' href='$row[link]'><img src='$row[img]' title='$row[desc]'/></a>";
}
?>
</div>
<div id="cap">
<?php
foreach($rows as $row){
  echo "<span class='desc' id='$row[id]'>$row[desc]</span>";
}
closedb();
?>
</div>

试试这个

        <?php
         require_once "./dbconfig.php";
          opendb();
          $sql = "SELECT * FROM images ORDER BY id DESC"; 
          $query = querydb($sql);
           $query2 = querydb($sql);
         ?>
         <div id="featured"> 
         <?php
         while($row = mysql_fetch_array( $query )){
          echo "<a target='_blank' href='$row[link]'><img src='$row[img]'
 title='$row[desc]'/>     </a>";
          }
          ?>
       </div>
        <div id="cap">
         <?php
         while($row2 = mysql_fetch_array( $query2 )){
         echo "<span class='desc' id='$row2[id]'>$row2[desc]</span>";
         }
         closedb(); 
         ?>

$str_res1='';
$str_res2='';
while($row=mysql\u fetch\u array($query)){
$str_res1.=“a target=''u blank'href='$row[link]'img src='$row[img]'title='$row[desc]'a”;
$str_res2.=“span class='desc'id='$row[id]'>$row[desc]span>”;
}

抱歉,我无法在回答中完成html标记,因为如果我写“”,它将从帖子中消失


通过此操作,您可以获取php字符串中的所有值,并可以在任何地方回显它。

请正确缩进源代码。对不起,请将html代码与下面的php代码分开,我无法编辑它:(@edward:是的,你可以看到-看到你问题下面的“编辑”链接了吗?是的,这是答案,谢谢你,谢谢你的回答。祝大家过得愉快。这似乎是在浪费内存。@edward:别忘了正确编码你输出的HTML。@JLevett:问题:PHP是写时复制的,那么这会浪费多少内存?
$stuff = mysql_query("SELECT * FROM tbl");

while($s = mysql_fetch_array($stuff)){
//ur code
}
// add this line
mysql_data_seek( $stuff, 0 );

while($r = mysql_fetch_array($stuff)){
//ur code
}