MySQL将奇怪的结果返回给PHP

时间:2013-10-28 21:10:08

标签: php mysql

我正在开发一个PHP应用程序,我正在尝试从一个名为articles的表中检索所有数据,以便在屏幕上显示它们。我已插入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 ... in double。更确切地说:

  

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

我不确定,我在这里做错了什么。有人可以暗示一下吗?

3 个答案:

答案 0 :(得分:3)

这是我过去使用过的:

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

依次检索每一行并循环遍历它以输出结果。

使用mysql_fetch_assoc仅返回关联数组,减少数组中的重复值。

答案 1 :(得分: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"; // ???
}

答案 2 :(得分: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)