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

如何通过wpdb get_results动态获取数据库查询的列名

实现类似mysqli fetch_fields()的列名获取功能(WordPress $wpdb场景)

要在WordPress的$wpdb(你的代码中为$wpdadb)环境下,无需显式定义列名就能获取查询结果的列名,有两种可靠实现方式:

方法一:利用$wpdb的get_col_info()方法(推荐)

这个方法直接从数据库结果集的元数据中提取列名,逻辑和mysqli_fetch_fields()完全一致,即使查询结果为空也能拿到列名。修改你的代码如下:

if (isset($_POST['sqlstmt']) && !empty($_POST['sqlstmt'])) {
    $sql = stripslashes($_POST['sqlstmt']);
    // 执行查询,让$wpdb存储结果集元数据
    $wpdadb->query($sql);
    // 获取所有列名,对应mysqli_fetch_fields()返回的name属性
    $column_names = $wpdadb->get_col_info('name');
    // 按需获取查询结果数据
    $result = $wpdadb->get_results($sql);
}

get_col_info('name')会返回一个包含所有列名的数组,比如执行SELECT id, title, content FROM posts,就会得到['id', 'title', 'content']。

方法二:从结果行提取键名(仅当结果非空时有效)

如果能确定查询一定会返回数据,可以直接从第一个结果行的键名获取列名,代码更简洁:

if (isset($_POST['sqlstmt']) && !empty($_POST['sqlstmt'])) {
    $sql = stripslashes($_POST['sqlstmt']);
    $result = $wpdadb->get_results($sql);
    
    // 从结果中提取列名
    $column_names = [];
    if (!empty($result)) {
        $first_row = reset($result);
        // 兼容对象/数组两种返回格式(get_results默认返回对象)
        $column_names = is_object($first_row) ? array_keys(get_object_vars($first_row)) : array_keys($first_row);
    }
}

注意:如果查询结果为空,这个方法无法获取列名,仅适合确定有数据返回的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:30:28