【问题标题】:Trouble using foreach in PHP to access results of SELECT query在 PHP 中使用 foreach 访问 SELECT 查询结果时遇到问题
【发布时间】:2018-07-03 02:54:37
【问题描述】:

我有一个名为people 的简单表,其中包含三个字段。最终,我想使用 SELECT 查询的结果来填充表单的默认值,但现在我只是想回显查询的结果。我已经尝试了很多东西,现在我在第 11 行(echo)上遇到了“数组到字符串转换”错误。这是我正在尝试的:

<?php
 include 'connect_db.php';
 $stmt = $conn->query("SELECT * FROM people");
 $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
 foreach ($results as $key => $value) {
  echo $key . ':' . $value . '<br>';
 }  
?>

我做错了什么?

【问题讨论】:

  • 您正在迭代行,其中$key 只是索引号,$value 是表示数据库行的数组。你不能像那样回显数组。
  • 在 $value 上嵌套另一个 foreach。
  • 在侧 foreach 循环中使用 print_r($value)。那么你就可以理解那个数组是怎么回事了。
  • 好的,这说明了一些事情。我得到:Array ( [first_name] =&gt; Bob [last_name] =&gt; Smith [name_id] =&gt; 2 ) 1。 (顺便说一句——最后的1 是什么?)但我仍然不清楚该怎么做。我是否需要按名称专门引用每一列?
  • PDO FetchAll Array的可能重复

标签: php mysql pdo


【解决方案1】:

您将为每一行返回一个关联数组。键将是列名。

 include 'connect_db.php';
 $stmt = $conn->query("SELECT * FROM people");
 $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
 foreach ($results as $row) {
  echo $row['some_column_name'] . '<br>';
 }  

或者

 include 'connect_db.php';
 $stmt = $conn->query("SELECT * FROM people");
 $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
 foreach ($results as $row) {
    foreach ($row as $key => $value){
       echo $key . ', ' . $value . '<br>';
    }
 }  

【讨论】:

  • 这是否意味着我需要为每一列重复echo $row['some_column_name'] . '&lt;br&gt;';
  • 刚刚更新了答案。但是,是的,您需要显式访问每一列,或者通过在单个行上再次循环来访问。
【解决方案2】:

你的问题很清楚,不能显示数组,也就是说你可以尝试使用json_encode($value)

你可以使用 print_r($value) 而不是 echo

【讨论】:

  • 这是最接近的问题,但实际问题是正在迭代错误的东西。
  • 是的,我们可以看到 $value 发生了什么,所以他可以使用正确的,或者你能告诉我另一种方式吗?
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-08
  • 1970-01-01
相关资源
最近更新 更多