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

使用mysqli查询MySQL仅返回首行,如何获取表中全部数据?

解决方法:获取MySQL表中全部用户数据

嘿,问题出在fetch_assoc()的用法上——这个方法每次只能从结果集中读取一行数据,所以你现在只拿到了第一条记录。要获取所有数据,你有两种常用的修改方式:

方法一:循环遍历结果集

初始化一个空数组,通过while循环逐行读取数据并添加到数组中,最后返回这个数组:

/**
 * @param string $nick
 * @return array|null
 */
public function getPlayerByNick(string $nick) : ?array{
    // 注意:这里原查询没用到$nick参数,如果你要按昵称筛选,记得修改查询!
    $query = "SELECT * FROM reports";
    $result = $this->connection->query($query);
    
    $allData = [];
    if($result instanceof \mysqli_result){
        // 循环读取每一行数据
        while($row = $result->fetch_assoc()){
            $allData[] = $row;
        }
        $result->free();
        var_dump($allData); // 现在会输出所有用户数据
        return $allData;
    }
    return null;
}

方法二:使用fetch_all()一次性获取所有数据

mysqli_result提供了fetch_all()方法,可以直接一次性取出所有结果行,注意要指定MYSQLI_ASSOC参数来保持关联数组格式:

/**
 * @param string $nick
 * @return array|null
 */
public function getPlayerByNick(string $nick) : ?array{
    $query = "SELECT * FROM reports";
    $result = $this->connection->query($query);
    
    if($result instanceof \mysqli_result){
        $allData = $result->fetch_all(MYSQLI_ASSOC);
        $result->free();
        var_dump($allData);
        return $allData;
    }
    return null;
}

重要提醒:修复未使用的参数与SQL注入风险

我注意到你的函数接收了$nick参数,但查询语句里完全没用到它!如果你本来是想根据昵称查询特定用户,千万不要直接把$nick拼到SQL里(会导致SQL注入),要用预处理语句:

/**
 * @param string $nick
 * @return array|null
 */
public function getPlayerByNick(string $nick) : ?array{
    // 使用预处理语句避免SQL注入
    $stmt = $this->connection->prepare("SELECT * FROM reports WHERE nick = ?");
    $stmt->bind_param("s", $nick);
    $stmt->execute();
    
    $result = $stmt->get_result();
    $allData = $result->fetch_all(MYSQLI_ASSOC);
    
    $result->free();
    $stmt->close();
    
    var_dump($allData);
    return $allData;
}

这样既实现了按昵称筛选,又保证了安全性。

内容的提问来源于stack exchange,提问作者Pocket Droid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:38:41