我正在开发一个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 ... .........
我不确定,我在这里做错了什么。有人可以暗示一下吗?
答案 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)