我是PHP的新手,我想知道这是否是正确完成的。我想在网站的两个不同位置显示表中的多行:
123
第一个完美无缺,但第二个没有显示任何内容。
答案 0 :(得分:1)
第一个到达数组的末尾,因此您必须使用mysql_data_seek重置指针。
如上所述,您应该stop using mysql_*
functions。它们不再被维护,而是officially deprecated。请转而了解prepared statements,并考虑使用PDO,it's really not hard。
如果您使用PDO,则可以更轻松地将所有结果放入阵列中,以便在需要时轻松导航和/或重置并重新使用。
答案 1 :(得分:1)
完成“消费”结果集后,就完成了。您的第二个循环将始终失败,因为第一个循环已用完所有行。你应该“缓存”结果,例如
while(... fetch from db ...) {
$data = ...; // build whatever you need
}
echo $data; // first output spot
...
echo $data; // second output spot
答案 2 :(得分:1)
您可以通过这种方式解决它(并在此之后替换您的mysql_ *函数)。
不是直接回应结果,而是将它们放入一个变量中并回显两次(如果你愿意,可以更频繁地回复):
<ul>
<li><input type="text" name="first" id="first" />
<ul>
<?php
$list = "";
while($row = mysql_fetch_assoc($sql)){
$name = $row["name"];
$list.= "<li>$name</li>";
}
echo $list;
?>
</ul>
</li>
<li>Vs.</li>
<li><input type="text" name="second" id="second" />
<ul>
<?php
echo $list;
?>
</ul>
</li>
<li><input type="submit" name="submit" id="submit" value="Compare!"/></li>
</ul>
答案 3 :(得分:1)
在第一个循环中,您将从 mysql_fetch_assoc()使用的缓冲区中获取所有行 - 这就是为什么循环首先结束的原因。当你运行第二个循环时,缓冲区中没有更多记录。
最简单的解决方案是首先遍历缓冲区并将数据保存到数组中,然后在您需要的2个位置使用该数组:
$rows = array();
while($row = mysql_fetch_assoc($sql)) $rows[] = $row;
然后在需要该数据的两个地方使用它:
foreach ($rows as $row) {
$name = $row["name"];
echo "<li>$name</li>";
}
请注意,从 PHP 5.5.0 开始, mysql_ 功能已被弃用你应该使用 mysqli _ 函数或 PDO 类。