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

时间:2013-11-23 15:22:09

标签: mysql pdo

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

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()也是如此。我想选择多个,所以我只用我需要的列填充我的表。

2 个答案:

答案 0 :(得分: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 :(得分:1)

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

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

这样做的另一个好处是,您可以指定列在输出中显示的顺序,而无需更改查询。

而且,与@ stUrb的答案一样,您需要打开PDO::FETCH_ASSOC才能使其正常工作。