如何通过SQL获取同一用户下相同meta_key的所有值并转为PHP数组
问题说明
现有wp_usermeta表结构如下:
user_id | meta_key | meta_value ------------------------------- 1 | car | mercedes 2 | hotel | meridia 2 | street | hillsroad 2 | car | audi 1 | car | ford
需要按指定用户ID获取所有meta_key为car的meta_value,组成如下格式的PHP数组:
$cars = array('mercedes', 'ford'); // 以用户ID=1为例
但当前使用的查询只能得到一个结果:
$cars = $wpdb->get_results('SELECT car FROM wp_usermeta WHERE user_id = '.$user->ID);
解决方法
修正SQL查询逻辑
原有查询里的SELECT car是错误的——表中没有名为car的字段,你需要筛选meta_key等于car的记录,再取出对应的meta_value字段。用
$wpdb->get_col()直接生成目标数组get_results()会返回包含对象或数组的集合,而get_col()可以直接返回单列数据的数组,更贴合需求。同时记得用参数绑定避免SQL注入:
$user_id = $user->ID; $cars = $wpdb->get_col( $wpdb->prepare( "SELECT meta_value FROM wp_usermeta WHERE user_id = %d AND meta_key = 'car'", $user_id ) );
执行后,当user_id=1时,$cars就会是array('mercedes', 'ford'),完全符合你的需求。
- 原有查询出错的原因
你的SQL里SELECT car是无效写法,数据库会把car当作字符串处理(不同数据库表现略有差异),所以实际只返回了一个固定的无效值,而非表中的真实数据。
内容的提问来源于stack exchange,提问作者Pepe
相关产品推荐
相关产品推荐

