0

我正在开发一个 PHP 应用程序,我正在尝试从名为 article 的表中检索所有数据以将它们呈现在屏幕上。我已插入 2 个示例条目,如下所示:

SQL result

Host: localhost
Database: samples
Generation Time: Oct 28, 2013 at 09:04 PM
Generated by: phpMyAdmin 4.0.8 / MySQL 5.5.30-log
SQL query: SELECT * FROM `articles` LIMIT 0, 30 ;
Rows: 2

article_id    article_title   article_content article_timestamp   
3 Sample title    Text    0
4 Title   Content 1234567

这是导致错误的代码,其中有一个小的调试打印:

<?php
class Article {
    public function fetch_all() {
        global $pdo;
        $query = "Select * from articles";
        $result = mysql_query($query);
        $res_array = mysql_fetch_array($result);
        foreach ($res_array as $x) {
            echo $x;
            echo "............";
        }
    }
}?>

我没有得到 2 个条目,而是只得到前 1 个……双倍。更准确地说:

3…………3…………示例标题…………示例标题………… ....文字............文字............0............0...... ……

我不确定,我在这里做错了什么。有人可以给个提示吗?

4

3 回答 3

3

这是我过去使用的:

<?php
$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result)) {
  foreach ($row as $x) {
    // ...
  }
}
?>

这将依次检索每一行并循环通过它以输出结果。

Usingmysql_fetch_assoc只返回一个关联数组,减少数组中的重复值。

于 2013-10-28T21:14:12.910 回答
1

首先,你mysql_fetch_array只打电话一次,这就是为什么你只得到一排。您应该在循环中调用它,直到它返回 fale 值,这意味着结果集中不再有行。

其次,默认情况下,mysql_fetch_array返回哈希和数组的奇怪混合,一个由列号和列名索引的数组,这解释了为什么值重复。您可以传递MYSQL_NUM以仅获取按列号索引的值。

while ($res_array = mysql_fetch_array($result, MYSQL_NUM)) {
    foreach ($res_array as $x) {
        echo $x;
        echo "............";
    }
    echo "\n"; // ???
}
于 2013-10-28T21:19:23.157 回答
0

PHP手册:

mysql_fetch_array(resource $result [, int $result_type = MYSQL_BOTH ])

返回与获取的行相对应的字符串数组,如果没有更多行,则返回 FALSE。返回数组的类型取决于 result_type 的定义方式。通过使用 MYSQL_BOTH(默认),您将获得一个包含关联索引和数字索引的数组。使用 MYSQL_ASSOC,你只能得到关联索引(因为 mysql_fetch_assoc() 有效),使用 MYSQL_NUM,你只能得到数字索引(因为 mysql_fetch_row() 有效)。

所以你应该这样写:mysql_fetch_array($result, MYSQL_ASSOC)

于 2013-10-28T21:17:18.967 回答