PHP 非 eof 记录集返回空值

发布于 2024-10-26 20:46:49 字数 401 浏览 4 评论 0原文

我在 php + 记录集方面遇到了一个奇怪的问题。 我的代码:

    $rc = mysql_query("select * from myTable",$db);
    if (!$row = mysql_fetch_assoc($rc))
    {
        $eof=true;
    }else{
        echo "there is data!<br>";
        $rs = mysql_fetch_array($rc);
        echo $rs[id];
        echo $rs[txt];
    }

奇怪的事情 - 查询是正确的 - 它回显“有数据”,但是当回显实际字段值时返回空字符串..:(

有什么想法可能是错误的吗?

i'm having a strange problem with php + recordsets.
my code:

    $rc = mysql_query("select * from myTable",$db);
    if (!$row = mysql_fetch_assoc($rc))
    {
        $eof=true;
    }else{
        echo "there is data!<br>";
        $rs = mysql_fetch_array($rc);
        echo $rs[id];
        echo $rs[txt];
    }

the strange thing - the query is correct - it's echoing "there is data" but when echoing the actual field values returns empty strings .. :(

any ideas what could be wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

生生不灭 2024-11-02 20:46:49

else 块中,您使用 mysql_fetch_array() 从数据库重新获取一些数据。

但是第一行已经由 mysql_fetch_assoc() 提前获取。

所以,基本上:

  • if 的条件下,您将获取第一行
  • 如果成功,您将进入 else
    • 您尝试获取第二行的位置
    • 并使用返回的(或不)数据,而不测试第二次提取是否成功。

您应该只进行一次提取——使用mysql_fetch_assocmysql_fetch_array——而不是两次。

In your else block, you are re-fetching some data from the database, using mysql_fetch_array().

But a first row has already been fetched earlier, by mysql_fetch_assoc().

So, basically :

  • In the if's condition, you are fetching a first row
  • If it succeed, you enter the else block
    • where you try to fetch a second row
    • and using the returned (or not) data, without testing the success of that second fetch.

You should probably do only one fetch -- using either mysql_fetch_assoc or mysql_fetch_array -- but not two.

海之角 2024-11-02 20:46:49

您已经获取了数据,请使用 mysql_num_rows() 代替

$rc = mysql_query("select * from myTable",$db);
if (mysql_num_rows($rc))
{
    echo "there is data!<br>";
    $rs = mysql_fetch_array($rc);
    echo $rs[id];
    echo $rs[txt];

}else{
    $eof=true;
}

you already fetched data, use mysql_num_rows() instead

$rc = mysql_query("select * from myTable",$db);
if (mysql_num_rows($rc))
{
    echo "there is data!<br>";
    $rs = mysql_fetch_array($rc);
    echo $rs[id];
    echo $rs[txt];

}else{
    $eof=true;
}
朦胧时间 2024-11-02 20:46:49

使用时要保持一致 if mysql_fetch_assoc($rc)...

$rs = mysql_fetch_array($rc); 

返回一个枚举数组,因此 $rs['id'] 不只存在 $rs[0]、$rs[1] 等。

用于

$rs = mysql_fetch_assoc($rc);

将 返回带有 $rs['id'] 的关联数组

您的第一个测试还获取并丢弃一行

并引用 $rs 中的索引:$rs['id'] 而不是 $rs[id]

Be consistent in your use of if mysql_fetch_assoc($rc)...

$rs = mysql_fetch_array($rc); 

will return an enumerated array, so $rs['id'] doesn't exist only $rs[0], $rs[1], etc.

Use

$rs = mysql_fetch_assoc($rc);

to return an associative array with $rs['id']

Your first test also fetches and discards a row

And quote the indexes in $rs: $rs['id'] rather than $rs[id]

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文