1
$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'];

最后两个回声是空的?

我需要在循环之外有一个与“最后一个”循环周期等效的数组。

4

2 回答 2

2

while 循环不断获取数据,直到没有更多数据,因此falsemysql_fetch_array. 最后一个值 ,在循环结束后false仍然存在,但只是使用 打印它,不会打印任何你能看到的东西。下一次调用and 也是如此。您可以通过执行变量来检查这一点。这将向您显示它包含 boolean 。$dataechomysql_fetch_arrayechovar_dump$datafalse

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

$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然后将包含结果中的最后一条记录。

于 2013-11-02T15:33:24.300 回答
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";
}

例如处理这种情况

于 2013-11-02T15:34:59.047 回答