我正在使用以下代码生成一个表:
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()
也是如此。我想选择多个列,这样我就可以只用我需要的列填充我的表。
只需在第二个 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);
或者,您可以预先将所需的列指定为数组,然后迭代该数组而不是行中的列。
$columns = array('I_like_this_column', 'this_one_too');
foreach ($columns as $colName)
echo '<td>' . nl2br($row[$colName]) . '</td>';
这还有一个额外的优点,即让您可以指定列在输出中出现的顺序,而无需更改查询。
并且,与@stUrb的答案一样,您需要打开
PDO::FETCH_ASSOC
才能正常工作。