我正在开发一个PHP应用程序,并试图从一个名为文章的表中检索所有数据,以便在屏幕上显示它们。我已经插入了两个样本条目如下:
SQL结果主机:本地主机数据库:示例生成时间:2013年10月28日上午09:04PM生成: phpMyAdmin 4.0.8 / MySQL 5.5.30-日志SQL查询:选择*从
articles限制0,30;行:2 article_id article_title article_content article_timestamp 3示例标题文本0 4标题内容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 "............";
}
}
}?>而不是获得两个条目,我只得到第一个1...in双。更确切地说:
title............Text............Text............0............0............ 3............3............Sample title............Sample
我不确定,我在这里做错了什么。谁能给点提示吗?
发布于 2013-10-28 21:19:23
首先,您只调用mysql_fetch_array一次,这就是为什么您只能得到一行。您应该在循环中调用它,直到它返回fale值,这意味着在结果集中不再有行。
第二,默认情况下,mysql_fetch_array返回哈希和数组的bizzare混合,这是一个按列号和列名索引的数组,这说明了为什么值是重复的。您可以传递MYSQL_NUM,以只获得按列编号索引的值。
while ($res_array = mysql_fetch_array($result, MYSQL_NUM)) {
foreach ($res_array as $x) {
echo $x;
echo "............";
}
echo "\n"; // ???
}发布于 2013-10-28 21:14:12
这是我过去用过的:
<?php
$result = mysql_query($query);
while ($row = mysql_fetch_assoc($result)) {
foreach ($row as $x) {
// ...
}
}
?>它依次检索每一行并循环遍历以输出结果。
使用mysql_fetch_assoc只返回一个关联数组,减少数组中的重复值。
发布于 2013-10-28 21:17:18
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)
https://stackoverflow.com/questions/19645124
复制相似问题