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

如何用wpdb返回类似PDO::FETCH_ASSOC格式的查询结果?

用wpdb实现类似PDO::FETCH_ASSOC的查询结果

wpdb提供了明确的参数来控制返回结果的格式,对应PDO::FETCH_ASSOC的场景分两种情况处理:

1. 获取单条记录(对应PDO的fetch(PDO::FETCH_ASSOC))

使用$wpdb->get_row()方法,第二个参数传入ARRAY_A,直接返回单条关联数组:

function find_user_by_username(string $email) {
    global $wpdb;
    // 用%s占位符做安全转义,避免SQL注入
    $user = $wpdb->get_row(
        $wpdb->prepare("SELECT user_email, password, active, email FROM wp_users WHERE user_email = %s", $email),
        ARRAY_A
    );
    return $user; // 返回关联数组,和PDO::FETCH_ASSOC结果格式一致
}

2. 获取多条记录(对应PDO的fetchAll(PDO::FETCH_ASSOC))

使用$wpdb->get_results()方法,第二个参数传入ARRAY_A,返回关联数组的集合:

function get_inactive_users() {
    global $wpdb;
    $users = $wpdb->get_results(
        "SELECT ID, user_email FROM wp_users WHERE active = 0",
        ARRAY_A
    );
    return $users; // 每个元素都是关联数组的数组
}

修正你原有的expired_code函数

你的问题在于用get_results()默认返回对象数组,却用数组索引$user['expired']访问,导致错误。改成get_row(..., ARRAY_A)即可:

function expired_code($ID, $email){
    global $wpdb;
    // 用prepare安全处理参数,指定ARRAY_A返回关联数组
    $user = $wpdb->get_row(
        $wpdb->prepare("SELECT ID, activation_code, activation_expiry < now() as expired FROM wp_users_infor WHERE active = 0 AND ID = %d", $ID),
        ARRAY_A
    );
    if ($user) {
        if ((int)$user['expired'] === 1) {
            // 过期逻辑处理
        } 
    } 
}

关于你用foreach的示例

如果是查询单条记录(比如按唯一的user_email查询),直接用get_row(ARRAY_A)更高效,没必要用foreach。如果是多条记录需要遍历,用get_results(ARRAY_A)得到关联数组集合后,再遍历是可行的:

function get_multiple_users(string $role) {
    global $wpdb;
    $users = $wpdb->get_results(
        $wpdb->prepare("SELECT user_email, display_name FROM wp_users WHERE user_role = %s", $role),
        ARRAY_A
    );
    foreach ($users as $user) {
        // 处理每个关联数组形式的用户数据
        echo $user['user_email'];
    }
    return $users;
}

关键说明

  • ARRAY_A:wpdb内置常量,指定返回关联数组,键为数据库字段名
  • $wpdb->prepare():必须用来处理用户输入参数,防止SQL注入,你的原代码直接把$ID传入get_results是不安全的,一定要用prepare转义
  • get_row():适合查询唯一记录(比如按ID、唯一邮箱),返回单条数据;get_results()适合查询多条记录,返回数组集合

内容的提问来源于stack exchange,提问作者ryuunosuke.7003a

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 21:54:25