我正在尝试从数据库中获取数据并将其打印在页面上。我用下一个选择:
$tableIndex=mysql_query('SELECT table_index FROM table_names');
当我使用while
循环打印时,没关系。
代码:
while($row = mysql_fetch_array($tableIndex) ){
echo $row[0].'<br>';}
结果:
1st
2nd
3rd
但是没有while
循环,它只给出了数组的第一个元素。
代码:
$row = mysql_fetch_array($tableIndex);
echo $row[0].'<br>';
echo $row[1].'<br>';
echo $row[2].'<br>';
结果:
1st
_
_
(其中“_”是空格)
有人可以谴责为什么这么奇怪吗?
答案 0 :(得分:14)
你从根本上误解了这些事情的运作方式。
mysql_fetch_array
中的“数组”不是所有记录的数组,而是当前记录中的数据数组。
在你的情况下,你只是获取一个字段,所以数组只包含一个元素(即$row[0]
),但原理是相同的 - 它是单个记录的数组你刚看完。
任何时候只有当前记录的数据在数组中。这就是while
循环的用途;它可以追溯每个记录的任何负载。
如果要创建包含所有数据的数组,则需要执行以下操作:
$fullData = array()
while($row = mysql_fetch_array($tableIndex) ){
$fullData[] = $row[0];
}
这会将您正在阅读的所有数据放入一个大数组中,这正是您所期望的。现在你可以在问题中做你想做的事了:
echo $fullData[0].'<br>';
echo $fullData[1].'<br>';
echo $fullData[2].'<br>';
希望有所帮助。
值得指出的是,mysql_xxx()
系列函数已被删除并被视为过时。如果您只是学习PHP(似乎就是这种情况),我强烈建议您停止学习这些功能,并学习PDO
库。它更现代,并且具有mysql
功能无法提供的许多功能。此外,PHP的未来版本将完全删除mysql
函数,因此您必须在某个时刻进行切换 - 现在可能也是如此,当您还在学习时。
另外(为了保持与问题相关),PDO库具有的功能实际上可以在单个函数中执行您正在寻找的内容:PDO::fetchAll()
。使用此方法意味着您可以在一行中将所有数据提取到单个大数组中,而无需执行while循环。代码看起来有点像这样:
$sth = $dbh->prepare("SELECT name, colour FROM fruit");
$sth->execute();
$result = $sth->fetchAll();
(例子来自PDO::fetchAll
的PHP手册)
答案 1 :(得分:2)
每次循环循环时,都会再次执行此代码:
$row = mysql_fetch_array($tableIndex);
所以每次$ row获取新值。没有循环的等价物将是:
$row = mysql_fetch_array($tableIndex);
echo $row[0].'<br>';
$row = mysql_fetch_array($tableIndex);
echo $row[0].'<br>';
$row = mysql_fetch_array($tableIndex);
echo $row[0].'<br>';