我是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>
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>
可以使用两次或者我错了吗?当我运行此代码时,第二个while循环不起作用,跨度根本没有显示。
请帮忙。
答案 0 :(得分:13)
在第二次循环播放之前使用此功能
mysql_data_seek($query,0);
答案 1 :(得分:13)
第一个循环已经消耗了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>
答案 2 :(得分:3)
数据库引用($query
)充当指向下一个未读记录的指针;当你调用mysql_fetch_array()
时,它会获取指向的记录,并将指针移动到下一个位置。
因此,在循环遍历它们之后,指针将指向记录集的末尾,因此当您请求下一条记录时它将返回false
。完成循环对指针没有任何其他作用;它仍然指向记录集的结尾。
所以你需要做的是将指针重置为数据集的开头,然后再循环它。
执行此操作的功能是mysql_data_seek();
因此,在第二个循环之前,您需要立即使用以下代码行:
mysql_data_seek($query, 0);
希望有所帮助。
答案 3 :(得分:1)
来自mysql_fetch_array
返回与获取的行对应的数组,并向前移动内部数据指针。
当您尝试使用第二个while循环时,内部数据点仍然在结尾。你没有做任何重置它。
您可以使用mysql_data_seek
将其移回到开头答案 4 :(得分:1)
您可以使用while
两次,但请参阅what it does:
它告诉PHP重复执行嵌套语句,只要while表达式的计算结果为TRUE。
一旦mysql_fetch_array没有更多要提取的行,它将在每次后续调用时返回false - 所以你的第一个while
循环将停止循环,因为表达式mysql_fetch_array( $query )
是假;并且因为它是第二个while
中的相同表达式,所以该循环将永远不会执行(因为表达式的计算结果为false
)。
怎么做:如果你想多次循环结果,我建议先将结果行存储到数组中,然后循环遍历它们。简化示例:
$results = Array();
while ($row = mysql_fetch_rows($query)) {
$results[] = $row;
}
foreach ($results as $row) {
echo $row['something'];
}
答案 5 :(得分:0)
mysql_fetch_array
将为空,因为您已从数据库中获取了所有行。您需要使用mysql_data_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
答案 6 :(得分:0)
使用mysql_fetch_array()
,您将逐步完成结果,直到结束。或者正如PHP文档所说:
返回与之对应的数组 获取的行并移动内部 数据指针前进。
这意味着,您需要从新的开始。所以,在第二次使用之前使用它:
mysql_data_seek($query,0);
答案 7 :(得分:0)
试试这个
<?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();
?>
答案 8 :(得分:0)
$ str_res1 =''; $ str_res2 =''; while($ row = mysql_fetch_array($ query)){ $ str_res1。=“a target ='_ blank'href ='$ row [link]'img src ='$ row [img]'title ='$ row [desc]'a”; $ str_res2。=“span class ='desc'id ='$ row [id]'&gt; $ row [desc] span&gt;”; }
抱歉,我无法在我的答案中填写html标签,因为如果我写“&lt;”它会从帖子中消失或“/&gt;”
通过这个你可以获取php字符串中的所有值,你可以在任何你想要的地方回显它。
答案 9 :(得分:0)
$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
}