MySQL向PHP返回奇怪的结果

MySQL向PHP返回奇怪的结果,php,mysql,Php,Mysql,我正在开发一个PHP应用程序,我试图从一个名为articles的表中检索所有数据,以便在屏幕上显示它们。我插入了两个示例条目,如下所示: 以下是导致错误的代码,其中有一个小的调试打印: <?php class Article { public function fetch_all() { global $pdo; $query = "Select * from articles"; $result = mysql_query($que

我正在开发一个PHP应用程序,我试图从一个名为articles的表中检索所有数据,以便在屏幕上显示它们。我插入了两个示例条目,如下所示:

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

<?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


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

这是我过去用过的:

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

这将依次检索每一行,并在其中循环以输出结果


使用
mysql\u fetch\u assoc
只返回一个关联数组,减少数组中的重复值。

这就是我过去使用的方法:

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

这将依次检索每一行,并在其中循环以输出结果

使用
mysql\u fetch\u assoc
只返回关联数组,减少数组中的重复值。

PHP手册:

mysql\u fetch\u数组(resource$result[,int$result\u type=mysql\u BOTH])

返回与所获取行相对应的字符串数组,如果没有更多行,则返回FALSE。返回数组的类型取决于结果类型的定义方式。通过使用MYSQL_BOTH(默认),您将获得一个包含关联索引和数字索引的数组。使用MYSQL\u ASSOC,您只能获得关联索引(正如MYSQL\u fetch\u ASSOC()所起的作用),使用MYSQL\u NUM,您只能获得数字索引(正如MYSQL\u fetch\u row()所起的作用)。

因此,您应该这样写:
mysql\u fetch\u array($result,mysql\u ASSOC)
PHP手册:

mysql\u fetch\u数组(resource$result[,int$result\u type=mysql\u BOTH])

返回与所获取行相对应的字符串数组,如果没有更多行,则返回FALSE。返回数组的类型取决于结果类型的定义方式。通过使用MYSQL_BOTH(默认),您将获得一个包含关联索引和数字索引的数组。使用MYSQL\u ASSOC,您只能获得关联索引(正如MYSQL\u fetch\u ASSOC()所起的作用),使用MYSQL\u NUM,您只能获得数字索引(正如MYSQL\u fetch\u row()所起的作用)。


所以你应该这样写:
mysql\u fetch\u array($result,mysql\u ASSOC)
首先,你只调用一次
mysql\u fetch\u array
,这就是为什么你只得到一行。您应该在循环中调用它,直到它返回fale值,这意味着resultset中不再有行


第二,默认情况下,
mysql\u fetch\u array
返回哈希和数组的混合,一个按列号和列名索引的数组,这解释了值重复的原因。您可以传递
MYSQL_NUM
以仅获取按列编号索引的值

while ($res_array = mysql_fetch_array($result, MYSQL_NUM)) {
    foreach ($res_array as $x) {
        echo $x;
        echo "............";
    }
    echo "\n"; // ???
}

首先,只调用一次mysql\u fetch\u array,这就是为什么只得到一行。您应该在循环中调用它,直到它返回fale值,这意味着resultset中不再有行


第二,默认情况下,
mysql\u fetch\u array
返回哈希和数组的混合,一个按列号和列名索引的数组,这解释了值重复的原因。您可以传递
MYSQL_NUM
以仅获取按列编号索引的值

while ($res_array = mysql_fetch_array($result, MYSQL_NUM)) {
    foreach ($res_array as $x) {
        echo $x;
        echo "............";
    }
    echo "\n"; // ???
}


将此答案与使用
mysql\u-fetch\u-assoc($result)
mysql\u-fetch\u-array($result,mysql\u-assoc)
mysql\u-fetch\u-array($result,mysql\u-NUM)
来消除重复columns@MarkBaker我自己更喜欢使用mysql\u fetch\u assoc(),但OP使用的是mysql\u fetch\u数组。不过,你说得很对。很好,我不想在我的案例中重复这个答案,结合使用
mysql\u fetch\u assoc($result)
mysql\u fetch\u array($result,mysql\u assoc)
mysql\u fetch\u array($result,mysql\u NUM)
来消除重复columns@MarkBaker我更喜欢自己使用mysql\u fetch\u assoc(),但是OP使用的是mysql_fetch_数组。不过,你说得很对。我进行了编辑以澄清这一点。很好,我不希望在我的案例中出现重复。如果您使用的是
mysql\u*
,那是什么?
mysql\u fetch\u数组
从结果中提取一行,并将两个数字作为关联索引。请使用
mysqli\u*
而不是
mysql\u*
mysql\uz
语句将在将来被删除。@MahanGM,不要对名称感到困惑…我在开始时用PDO输入了它,但由于一些设置问题,我尝试了mysql\ux。我只是保留了名称,以避免在多个文件中出现断开的引用。这是一项待完成的任务,我将尽快解决这个问题method@estXcrew,谢谢,如果您使用的是
mysql\u*
,我将迁移
$pdo
是什么?
mysql\u fetch\u数组
从结果中获取一行,并将两个数字作为关联索引。请使用
mysqli\u*
而不是
mysql\u*
mysql\uz
语句将在将来被删除。@MahanGM,不要对名称感到困惑…我在开始时用PDO输入了它,但由于一些设置问题,我尝试了mysql\ux。我只是保留了名称,以避免在多个文件中出现断开的引用。这是一项待完成的任务,我将尽快解决这个问题method@estXcrew,谢谢,我将迁移这将消除重复项,但不会返回他的第二条记录。所以,实际上只有部分答案。这将消除重复项,但不会返回他的第二条记录。所以,事实上只有部分答案。是的,之前已经计算过:)那么,如果我使用echo$res_数组,我得到更奇怪结果的原因是什么?是的,之前已经计算过:)所以,如果我使用echo$res_数组,我得到更奇怪结果的原因是什么?