PHP - 如何在两个不同的位置显示多行?

时间:2015-07-28 17:46:09

标签: php

我是PHP的新手,我想知道这是否是正确完成的。我想在网站的两个不同位置显示表中的多行:

123

第一个完美无缺,但第二个没有显示任何内容。

4 个答案:

答案 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 类。