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
相关产品推荐
相关产品推荐

