当前位置: 首页> 最新文章列表> 如何将 mysqli_result 中的查询结果完整地转换成一个二维数组?

如何将 mysqli_result 中的查询结果完整地转换成一个二维数组?

M66 2025-05-28

在使用 PHP 和 MySQL 开发应用时,我们经常会用到 mysqli 来执行数据库查询。执行 SELECT 语句后,mysqli_query() 返回一个 mysqli_result 对象,但这个对象并不是直接可用的数组格式。为了更方便地处理数据,我们通常需要把查询结果完整地转换成一个二维数组。

下面是具体的实现方法。

核心代码

我们可以使用 mysqli_fetch_all() 来一次性获取所有行,但要注意这个函数需要至少 PHP 5.3 及以上版本。如果要兼容更早的版本,可以使用 mysqli_fetch_assoc() 结合循环。

以下是使用 mysqli_fetch_all() 的例子:

<?php
$mysqli = new mysqli("localhost", "username", "password", "database");

// 检查连接
if ($mysqli->connect_error) {
    die("连接失败: " . $mysqli->connect_error);
}

$sql = "SELECT * FROM your_table";
$result = $mysqli->query($sql);

if ($result) {
    // MYSQLI_ASSOC 表示返回关联数组
    $data = $result->fetch_all(MYSQLI_ASSOC);
    print_r($data);
} else {
    echo "查询失败: " . $mysqli->error;
}

$mysqli->close();
?>

兼容性更好的循环方式

如果你需要兼容更早版本的 PHP,推荐使用 while 循环:

<?php
$mysqli = new mysqli("localhost", "username", "password", "database");

if ($mysqli->connect_error) {
    die("连接失败: " . $mysqli->connect_error);
}

$sql = "SELECT * FROM your_table";
$result = $mysqli->query($sql);

$data = [];
if ($result) {
    while ($row = $result->fetch_assoc()) {
        $data[] = $row;
    }
    print_r($data);
} else {
    echo "查询失败: " . $mysqli->error;
}

$mysqli->close();
?>

封装成函数

为了更好地复用,你也可以把它封装成一个函数:

<?php
function fetchAllResults($mysqli, $query) {
    $result = $mysqli->query($query);
    $data = [];
    if ($result) {
        while ($row = $result->fetch_assoc()) {
            $data[] = $row;
        }
    }
    return $data;
}

$mysqli = new mysqli("localhost", "username", "password", "database");

if ($mysqli->connect_error) {
    die("连接失败: " . $mysqli->connect_error);
}

$sql = "SELECT * FROM your_table";
$data = fetchAllResults($mysqli, $sql);
print_r($data);

$mysqli->close();
?>

注意事项

  1. 安全性:请记得对外部输入的数据使用预处理语句 (prepare) 防止 SQL 注入。

  2. 性能:一次性取出大量数据可能会占用较多内存,如果数据量大,建议分页查询。

  3. 错误处理:总是检查 $result 是否为 false,避免在查询失败时继续执行后续代码。

示例网址

假设你要用的接口是: