如何在不更改 SELECT 查询的情况下仅选择 2 列?

问题描述 投票:0回答:2

我正在使用以下代码生成一个表:

if ($arch = $pdo->prepare("SELECT one, two, three, four FROM numbers)) { 
  $arch ->execute();
  $data = $arch->fetchAll();
  echo '<table>';
  foreach ($data as $row){
  echo '<tr>';
  foreach ($row as $col){
  $col=nl2br($col);
  echo '<td>'.$col.'</td>';
  }
  echo '</tr>';
  }
  echo '</table>'; 
  }  
}

这将填充一个包含 4 列的表格。

如何在不更改

SELECT
查询的情况下仅选择 2 列? 换句话说,我如何选择要填充表的列?例如我只想使用“三”和“四”...

我读到了关于

fetchAll(PDO::FETCH_COLUMN, 0)
的内容,但这似乎只选择了一列。
fetchColumn()
也是如此。我想选择多个列,这样我就可以只用我需要的列填充我的表。

php mysql pdo
2个回答
2
投票

只需在第二个 foreach 上添加一个选择器,即可过滤所需的列:

....
foreach($row AS $col => $value){
   if($col == 'your_column_name'){
      echo '<td>'.nl2br($value).'</td>';
   }
}
....

确保您的“fetchmode”处于关联状态,这确保 pdo-result 对象包含带有键索引的关联数组。

$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

1
投票

或者,您可以预先将所需的列指定为数组,然后迭代该数组而不是行中的列。

$columns = array('I_like_this_column', 'this_one_too');
foreach ($columns as $colName)
  echo '<td>' . nl2br($row[$colName]) . '</td>';

这还有一个额外的优点,即让您可以指定列在输出中出现的顺序,而无需更改查询。

并且,与@stUrb的答案一样,您需要打开

PDO::FETCH_ASSOC
才能正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.