在不知道字段 php 的情况下循环 fetchall

Posted

技术标签:

【中文标题】在不知道字段 php 的情况下循环 fetchall【英文标题】:Loop through fetchall without knowing the fields php 【发布时间】:2015-05-28 07:30:41 【问题描述】:

我有一个简单的查询,它将从用户表中获取所有数据

$query = $this->pdo->prepare('SELECT * FROM `users`');
$query->execute();
return $query->fetchAll();

然后我会有一个像这样的 foreach 循环

$results = $User->getUser();
foreach($results as $result)
echo $result['fname'];
echo $result['lname'];

但是有没有办法在不写每个字段名称的情况下显示每个字段?

【问题讨论】:

内循环,如foreach($result as $column) ... 。你甚至可以像这样获取密钥:foreach($result as $key=>$column) ... 那又怎样,我还得放 $column['fname'] 之类的东西... 不,$column 将具有该列中的任何值。 $column$result['fname'] 相同。 您可能还想在fetchAll 中指定类似PDO::FETCH_ASSOC 的提取样式。 我为我的 cmets 提供了一个答案,以便更清楚地知道该怎么做。 【参考方案1】:

首先,修复您的返回 fetchAll 以指定返回样式,如下所示:

return $query->fetchAll(PDO::FETCH_ASSOC);

然后您可以像这样使用内部循环和外部循环:

//get the results
$results = $User->getUser();
//loop over the results, setting $result to an array representing each row
foreach($results as $result)
    //loop over each $result (row), setting $key to the column name and $value to the value in the column.
    foreach($result as $key=>$value)
        //echo the key and value.
        echo "$key = $value<br>";
    

这将输出所有列及其值,而不管数组中有哪些列。在 cmets 之后,您可以看到我所做的是使用您的代码循环外部数组,该数组是查询中每一行的数组。然后从每一行遍历数组,获取列名和该列中的值。现在我只是在呼应列和值。您可能想要做更多的事情,例如将其回显到表格或任何您的最终目标。

【讨论】:

我不太喜欢解析带有变量的字符串,我会将 echo 更改为 echo $key . ' = ' . $value . '&lt;br /&gt;';

以上是关于在不知道字段 php 的情况下循环 fetchall的主要内容,如果未能解决你的问题,请参考以下文章

PHP MYSQL - 在不使用列名但使用自动增量字段的情况下插入

如何在不使用php循环的情况下同时向ios设备发送1000条推送通知

如何在不使用循环的情况下在 PHP 中向多维添加新的键和值......?

如何在不使用PHP的循环的情况下获取对象数组的索引

PHP:在不改变 memory_limit 和 max_execution_time 的情况下读取和导出大数据

PHP - 在不知道扩展名的情况下检查文件是不是存在