没有显示数据库中的第一条记录?

时间:2012-06-07 00:03:01

标签: php mysql while-loop

尝试在客户端网站上工作,我遇到了一些困难。当我在数据库中没有条目时,它会在if(!row)处捕获并显示该消息。这部分工作正常。我的问题是当我在数据库中有条目时,它们不显示。我知道while循环有效,因为我有几个页面运行类似的循环。事实上,这个循环是从另一个页面复制的,该页面在公共页面上显示该条目的信息。

我知道这个网站主要是为了提问,但我想我只需要一双新眼睛来看我的代码(我已经编码了12个多小时而且我有点累了)。下面的许多代码来自以前的网页设计师,如果由我决定,我只会重写整个网站,因为代码是“过时的”,但客户只是希望我改进它。任何帮助都会非常感激。

$row = mysql_fetch_array($result);

if (!$row) {
    echo '<tr><td bgcolor="ffffff" colspan="3"><font face="arial,helvetica" size="2" color="000000">There are no entries at this time, check back later.</font></td></tr>';
} else {
    while ($row = mysql_fetch_array($result)) {

        echo '<tr>
                    <td bgcolor="ffffff"><font face="arial,helvetica" size="2" color="000000">$date - $row["theme"]</font></td>
                    <td bgcolor="ffffff" align="center">
                    <form action="dsp_modifyposition.php">
                        <input type="hidden" name="specialID" value="$row["specialID"]">
                        <input type="hidden" name="theme" value="$row["theme"]">
                        <input type="submit" value="  Modify  ">
                    </form>
                    </td>
                    <td bgcolor="ffffff" align="center">
                    <form action="act_deleteposition.php" onsubmit="return confirm(\'Are you sure you want to delete this event: $date \')">
                        <input type="hidden" name="specialID" value="$row["specialID"]">
                        <input type="hidden" name="theme" value="$row["theme"]">
                        <input type="submit" value="  Delete  ">
                    </form>
                    </td>
                </tr>';
    }
}

3 个答案:

答案 0 :(得分:3)

第一次调用mysql_fetch_array时,mysql结果指针将移动到下一行。因为此行没有任何操作,所以第一行不会显示。你想要的是mysql_num_rows来检查结果集中有多少行。作为旁注,如果您不使用数字索引,我建议使用mysql_fetch_assoc

if (!mysql_num_rows($result)) {
    echo '...';
} else {
    while ($row = mysql_fetch_assoc($result)) {
        echo '...';
    }
}

答案 1 :(得分:1)

将您的第一行更改为:

$cnt = mysql_num_rows($result)

if (!$cnt) {
    echo '<tr><td bgcolor="ffffff" colspan="3"><font face="arial,helvetica" size="2" color="000000">There are no entries at this time, check back later.</font></td></tr>';
} else {
....

答案 2 :(得分:0)

你的if()语句似乎有缺陷。声明:

$row = mysql_fetch_array($result);

将获取一行并将$ result中的指针移动到下一行,因此您的while将从第二行开始。如果您的查询只返回一行,那么您将有效地调用mysql_fetch_array()两次并跳过返回的数据。

您应该找到一些其他方法来检查您是否有结果(可能使用mysql_num_rows())。