$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'循环循环。
答案 0 :(得分:2)
while循环不断提取数据,直到没有更多数据,因此false
返回mysql_fetch_array
。循环结束后,最后一个值false
仍在$data
,但只需使用echo
打印,就不会打印任何可以看到的内容。 mysql_fetch_array
和echo
的下一次调用也是如此。您可以通过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";
}
例如处理这种情况