MySQL向PHP返回奇怪的结果
我正在开发一个PHP应用程序,我试图从一个名为articles的表中检索所有数据,以便在屏幕上显示它们。我插入了两个示例条目,如下所示: 以下是导致错误的代码,其中有一个小的调试打印: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
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_数组,我得到更奇怪结果的原因是什么?