我正在使用以下代码生成一个表:
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()
也是如此。我想选择多个,所以我只用我需要的列填充我的表。
答案 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
才能使其正常工作。