2

我正在尝试从数据库中获取数据并将其打印在页面上。我使用下一个选择:

$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

_

_

(其中“_”是空格)

有人可以解释为什么它会如此奇怪吗?

4

2 回答 2

15

你从根本上误解了这些东西是如何工作的。

其中的“数组”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();

(示例取自 PHP 手册PDO::fetchAll

于 2013-06-10T11:51:02.273 回答
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>';
于 2013-06-10T11:42:44.223 回答