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

PHP使用mysqli的fetch()返回布尔值 无法获取查询字段数据如何解决

问题原因

你调用的是mysqli_stmt类的fetch()方法,该方法本身仅用于将查询结果列绑定到预先声明的变量中,返回值只能是布尔值:匹配到结果时返回true,无匹配结果时返回false,不会返回包含查询字段的数组或对象,因此你无法直接通过$row获取password等字段值。

解决方案

你可以选择以下两种常用方案实现字段读取:

  • 方案1:通过bind_result()绑定变量后读取
    该方案不需要额外扩展支持,兼容性最好:

    if ($query = $db->prepare("SELECT id, name, email, password FROM `users` WHERE email = ?")) {
        $query->bind_param('s', $email);
        $query->execute();
        // 按SELECT查询的字段顺序绑定对应变量
        $query->bind_result($id, $name, $userEmail, $password);
        // 调用fetch后绑定的变量会被自动赋值
        if ($query->fetch()) {
            // 直接使用绑定后的变量即可
            echo '匹配到用户,密码为:' . $password;
        } else {
            echo '无匹配结果';
        }
        $query->close();
    }
    
  • 方案2:先获取结果集再读取字段
    如果你习惯用关联数组/对象读取所有字段,可以先调用get_result()获取结果集对象,再调用对应方法读取字段:

    if ($query = $db->prepare("SELECT id, name, email, password FROM `users` WHERE email = ?")) {
        $query->bind_param('s', $email);
        $query->execute();
        // 获取结果集对象,需环境已安装mysqlnd扩展
        $result = $query->get_result();
        // 读取为关联数组
        $row = $result->fetch_assoc();
        if ($row) {
            // 按数组键访问对应字段
            echo '匹配到用户,密码为:' . $row['password'];
        } else {
            echo '无匹配结果';
        }
        $query->close();
    }
    

注意:get_result()依赖mysqlnd扩展,绝大多数主流PHP环境默认已开启该扩展,若遇到调用报错可直接使用方案1。

内容的提问来源于stack exchange,提问作者Qristian Pinella

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:48:03