在while循环之后,PHP / SQL无法使用查询中的数据

时间:2013-11-02 15:25:08

标签: php mysql

$sql = mysql_query("SELECT * FROM table WHERE user='$user'" ); 

while($data=mysql_fetch_array($sql)){
    echo $data['user']; //this is fine

}

echo $data['user'];
$data=mysql_fetch_array($sql);
echo $data['user'];

最后两个回声是空的?

我需要在循环之外有一个数组,它等同于'last'循环循环。

2 个答案:

答案 0 :(得分:2)

while循环不断提取数据,直到没有更多数据,因此false返回mysql_fetch_array。循环结束后,最后一个值false仍在$data,但只需使用echo打印,就不会打印任何可以看到的内容。 mysql_fetch_arrayecho的下一次调用也是如此。您可以通过var_dump变量的$data来检查这一点。这将显示它包含布尔值false

如果您希望在循环结束后能够使用数据,则可以将获取的所有数据保存到一个大数组中。如果您正在获取大量数据,那么这可能是一个糟糕的选择,但从那里您应该能够自己更改它,以便您可以保存和使用有用的数据。要将所有数据存储在数组中,请将循环更改为:

$alldata = array();
while($data=mysql_fetch_array($sql))
{
  echo $data['user'];
  $alldata[] = $data;
}

然后,您可以迭代$alldata以再次检查结果。

更新:在您的上一条评论中,您说您想要访问最后提取的记录。你可以这样做:

$lastdata = array();
while($data=mysql_fetch_array($sql))
{
  echo $data['user'];
  $lastdata = $data;
}
然后

$lastdata将包含结果中的最后一条记录。

答案 1 :(得分:2)

由于以下原因:

while($data = mysql_fetch_array($sql)) {
    // mysql_fetch_array returned something 'not false' and this value
    // is assigned to $daat
}
// mysql_fetch_array() returned false, because there are no more rows
// false is assigned to $data, and because the statement within while(...)
// isn't true anymore the loop is stopped.

使用

$data = mysql_fetch_array($sql);
if (!$data) {
    echo "User don't exists";
}

例如处理这种情况