而循环可以';不能用两次吗?PHP
我是PHP新手,希望有人能帮助我。我在mysql数据库中有一个包含“id”、“img”、“link”和“desc”的表。我希望它能像这样呼应出来:而循环可以';不能用两次吗?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'><
<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
}