如何通过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
相关产品推荐
相关产品推荐

