【发布时间】:2020-05-29 05:37:06
【问题描述】:
我正在使用 PHP 代码将数据从表(数据库)导出到 CSV 文件。
但不幸的是,它只写了 98000 行,而我在表中总共有 198000 行。
我认为表格中的总数据高达 34mb。
第二件事,一旦文件写入完成,我如何自动下载。任何人都可以帮助谢谢。
$que = "SELECT * FROM campaign";
$query = mysqli_query($connection,$que);
$number_rows = mysqli_num_rows($query);
if ($number_rows >= 1)
{
$filename = "exported_db_" . date("m-d-Y_hia") . ".csv"; // filenme with date appended
$fp = fopen($filename, "w"); // open file
$row = mysqli_fetch_assoc($query);
$seperator = "";
$comma = "";
foreach ($row as $name => $value)
{
$seperator .= $comma . $name; // write first value without a comma
$comma = ","; // add comma in front of each following value
}
$seperator .= "\n";
echo "Database has been exported to $filename";
fputs($fp, $seperator);
mysqli_data_seek($query, 0); // use previous query leaving out first row
while($row = mysqli_fetch_assoc($query))
{
$seperator = "";
$comma = "";
foreach ($row as $name => $value)
{
$seperator .= $comma . $value; // write first value without a comma
$comma = ","; // add comma in front of each following value
}
$seperator .= "\n";
fputs($fp, $seperator);
}
fclose($fp);
}
else {
echo "There are no records in the database to export.";
}
【问题讨论】:
-
可能是超时。尝试从控制台运行此脚本。
-
查看'fputcsv()` 以写入数据,而不是为每一行使用循环。
-
@odan 我已经在 SSH 中尝试了 mysql 代码,我得到了正确和完整的记录,但我应该在 php 中需要,我在管理面板中使用它。
-
@NigelRen 是的,我已经尝试过,但仍然存在同样的问题,只有一半数据写入文件。
$que = "SELECT * FROM campaign"; $query = mysqli_query($connection,$que); $number_rows = mysqli_num_rows($query); if ($number_rows >= 1) { $filename = "exported_db_" . date("m-d-Y_hia") . ".csv"; $fp = fopen($filename, 'w'); $placed_header = false; while($row = mysqli_fetch_array($query, MYSQLI_ASSOC)) { if(!$placed_header) { fputcsv($fp, array_keys($row)); $placed_header = true; } fputcsv($fp, array_values($row)); } fclose($fp); } -
服务器速度也不错。我正在使用 VPS 服务器和 70GB SSD,很多东西都是无限的。
标签: php export-to-csv