当前位置: 首页> 最新文章列表> 将 mysqli_result 数据导出为 CSV 文件

将 mysqli_result 数据导出为 CSV 文件

M66 2025-05-28

在 PHP 中,使用 mysqli 扩展进行数据库操作时,我们通常需要将查询结果导出为 CSV 文件。mysqli_result 类用于处理查询结果集,而要将这些数据导出为 CSV 文件,我们需要逐行读取查询结果,并将其写入 CSV 文件。本文将详细讲解如何使用 mysqli_result 函数完成这一操作。

1. 连接数据库

首先,我们需要建立数据库连接,确保能够成功查询数据。以下是建立连接的代码示例:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

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

2. 执行查询

接下来,执行 SQL 查询并获取 mysqli_result 对象。假设我们要查询一个名为 users 的表格,查询所有用户的姓名和电子邮件。

<?php
$sql = "SELECT name, email FROM users";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // 数据存在,可以导出
    exportToCSV($result);
} else {
    echo "没有数据";
}
?>

3. 导出数据为 CSV 文件

现在,我们将使用 mysqli_result 对象,将查询结果导出为 CSV 文件。我们通过 fputcsv 函数来实现这一功能。

<?php
function exportToCSV($result) {
    // 设置文件名
    $filename = "users_data_" . date("Y-m-d") . ".csv";

    // 打开输出流,或者创建并打开一个 CSV 文件
    $output = fopen('php://output', 'w');

    // 设置 HTTP 头信息,强制浏览器下载文件
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename="' . $filename . '"');

    // 输出 CSV 文件的列头
    $columns = $result->fetch_fields();
    $header = [];
    foreach ($columns as $column) {
        $header[] = $column->name;
    }
    fputcsv($output, $header);

    // 输出查询结果
    while ($row = $result->fetch_assoc()) {
        fputcsv($output, $row);
    }

    // 关闭输出流
    fclose($output);
}
?>

4. 完整代码示例

以下是完整的 PHP 代码,将查询结果导出为 CSV 文件:

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

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

// 执行查询
$sql = "SELECT name, email FROM users";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    exportToCSV($result);
} else {
    echo "没有数据";
}

// 导出 CSV 函数
function exportToCSV($result) {
    // 设置文件名
    $filename = "users_data_" . date("Y-m-d") . ".csv";

    // 打开输出流,或者创建并打开一个 CSV 文件
    $output = fopen('php://output', 'w');

    // 设置 HTTP 头信息,强制浏览器下载文件
    header('Content-Type: text/csv');
    header('Content-Disposition: attachment; filename="' . $filename . '"');

    // 输出 CSV 文件的列头
    $columns = $result->fetch_fields();
    $header = [];
    foreach ($columns as $column) {
        $header[] = $column->name;
    }
    fputcsv($output, $header);

    // 输出查询结果
    while ($row = $result->fetch_assoc()) {
        fputcsv($output, $row);
    }

    // 关闭输出流
    fclose($output);
}

// 关闭数据库连接
$conn->close();
?>

通过上述步骤,我们可以很容易地将 MySQL 查询结果导出为 CSV 文件。只要确保连接到数据库并正确查询数据,就能通过 mysqli_result 处理结果并导出。