在WordPress中通过MySQL调用get_current_user_id()获取用户关联数据问题
解决MySQL查询当前登录用户数据的问题
核心问题
你直接在SQL语句里使用get_current_user_id()、current_user->ID这类写法是无效的——MySQL本身不认识PHP/WordPress的函数或变量,两者属于不同的运行环境,必须通过PHP先获取用户ID,再将这个值传入SQL查询中。
正确实现方式(WordPress环境下)
从表名uwp_usermeta和你尝试的函数来看,你是在WordPress环境中操作,推荐用WordPress自带的$wpdb数据库类执行查询,既安全又符合规范:
- 获取当前登录用户ID
用WordPress官方函数get_current_user_id()获取ID,未登录用户会返回0:
<?php // 获取当前登录用户ID $user_id = get_current_user_id(); if ($user_id === 0) { // 用户未登录的处理逻辑,比如提示登录 exit('请先登录'); } ?>
- 查询当前用户的元数据
用参数绑定的方式执行SQL,避免SQL注入风险:
<?php // 查询当前用户的user_id和custom字段 $user_meta = $wpdb->get_row( $wpdb->prepare( "SELECT user_id, custom FROM uwp_usermeta WHERE user_id = %d", $user_id ) ); // 输出结果示例 if ($user_meta) { echo "用户ID:{$user_meta->user_id},Custom值:{$user_meta->custom}"; } else { echo "该用户无相关元数据"; } ?>
- 修正后的平均值查询
你的第二个SQL存在语法错误(AS custom是表别名,导致avg(custom)会错误引用表而非字段),修正后如果是计算所有用户custom字段的平均值:
<?php $average = $wpdb->get_row( "SELECT 'average' AS user_id, avg(custom) AS average_custom FROM uwp_usermeta" ); // 输出平均值 if ($average) { echo "所有用户Custom平均值:{$average->average_custom}"; } ?>
关键说明
- 必须将代码放在
.php文件中,开头要加<?php标签(PHP代码的标识),纯SQL文件无法直接调用PHP/WordPress的函数。 - 不要直接拼接用户ID到SQL语句中,一定要用
$wpdb->prepare()做参数绑定,防止SQL注入攻击。
内容的提问来源于stack exchange,提问作者Stef Price
相关产品推荐
相关产品推荐

