不知道字段的情况下循环遍历fetchall(PHP)

4
我有一个简单的查询语句,可以从用户表中获取所有内容。
$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'];
}

但是有没有一种方法可以显示每个字段而不必写出每个字段的名称?

1
内层循环可以像这样使用:foreach($result as $column){ ... }。你甚至可以获取键名,像这样:foreach($result as $key=>$column){ ... } - Jonathan Kuhn
那么接下来,我仍然需要像 $column['fname'] 这样输入一些东西... - user1217322
不,$column 将拥有该列中的任何值。 $column 将与 $result['fname'] 相同。 - Jonathan Kuhn
你可能还想在 fetchAll 中指定一个获取样式,比如 PDO::FETCH_ASSOC - Jonathan Kuhn
我将我的评论作为答案,以使该操作更加明显。 - Jonathan Kuhn
$fields = array_keys($results[0]); foreach($results as $result) { foreach($fields as $key) { echo $result[$key];}} - mopsyd
1个回答

6

首先,修复您的返回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>";
    }
}

无论数组中有哪些列,这将输出所有列及其值。根据注释,您可以看到我所做的是,使用您的代码,循环遍历外部数组,该数组是查询结果中每一行的数组。然后循环遍历每行的数组,获取列名和该列中的值。现在我只是回显列和值。您可能想要执行更多操作,例如将其输出到表格或其他最终目标。


1
我不太喜欢在字符串中使用变量解析,我会将echo更改为echo $key . ' = ' . $value . '<br />'; - cmorrissey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接