在 PHP 中,使用 mysqli 扩展进行数据库操作时,我们通常需要将查询结果导出为 CSV 文件。mysqli_result 类用于处理查询结果集,而要将这些数据导出为 CSV 文件,我们需要逐行读取查询结果,并将其写入 CSV 文件。本文将详细讲解如何使用 mysqli_result 函数完成这一操作。
首先,我们需要建立数据库连接,确保能够成功查询数据。以下是建立连接的代码示例:
<?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 查询并获取 mysqli_result 对象。假设我们要查询一个名为 users 的表格,查询所有用户的姓名和电子邮件。
<?php
$sql = "SELECT name, email FROM users";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// 数据存在,可以导出
exportToCSV($result);
} else {
echo "没有数据";
}
?>
现在,我们将使用 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);
}
?>
以下是完整的 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 处理结果并导出。