You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PDO查询niveles表列名时,如何剔除前两个列(ID、USER)

解决PDO获取指定列名的问题

嗨,我来帮你搞定这个需求!你现在已经能拿到所有列名了,要只保留NIVEL_1、NIVEL_2、NIVEL_3,有两种简单的方法:

方法一:直接在SQL语句里过滤(推荐)

这种方法最高效,因为数据库直接返回你需要的列,不用额外处理多余数据。你可以修改查询语句,添加一个条件筛选以NIVEL_开头的列:

$testing = $this->connection->query("
    SELECT COLUMN_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = 'niveles' 
    AND COLUMN_NAME LIKE 'NIVEL_%'
");

如果你的目标列名是固定的,也可以直接指定列名列表,这样更精准:

$testing = $this->connection->query("
    SELECT COLUMN_NAME 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = 'niveles' 
    AND COLUMN_NAME IN ('NIVEL_1', 'NIVEL_2', 'NIVEL_3')
");

方法二:在PHP中过滤查询结果

如果不想改SQL,也可以拿到所有列名后,在PHP里剔除不需要的列:

方式1:排除指定列

先获取所有列名数组,再用array_diff去掉ID和USER:

// 获取所有列名数组
$allColumns = $testing->fetchAll(PDO::FETCH_COLUMN, 0);
// 定义要排除的列
$excludeColumns = ['ID', 'USER'];
// 过滤得到目标列
$targetColumns = array_diff($allColumns, $excludeColumns);

方式2:筛选符合前缀的列

用array_filter筛选出以NIVEL_开头的列:

$allColumns = $testing->fetchAll(PDO::FETCH_COLUMN, 0);
$targetColumns = array_filter($allColumns, function($columnName) {
    // PHP 8+ 可以用str_starts_with
    return str_starts_with($columnName, 'NIVEL_');
    // 兼容PHP 7及以下版本用substr
    // return substr($columnName, 0, 6) === 'NIVEL_';
});

两种方法里,方法一更推荐,因为能减少数据库返回的数据量,性能更好~

内容的提问来源于stack exchange,提问作者Omar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:08:45