php - excel导出无法从mysql获取太多数据

标签 php mysql excel

我有一段代码可以使用 php 从 mysql 获取数据并将其导出到 excel 文件,它是这样的:

<?php
$xls_filename = "export_".rand(100000,999999).".xls"; // Define Excel (.xls) file name

// Header info settings
header("Content-Type: application/xls");
header("Content-Disposition: attachment; filename=$xls_filename");
header("Pragma: no-cache");
header("Expires: 0");

/***** Start of Formatting for Excel *****/
// Define separator (defines columns in excel &amp; tabs in word)
$sep = "\t"; // tabbed character

$slct2 = $dbh->prepare("SELECT * FROM forms_answers WHERE ans_formid='{$identity}'");
$slct2->execute();

while($name = $slct2->fetch(PDO::FETCH_ASSOC)) {
    $stmt2 = $dbh->prepare("SELECT * FROM forms_answers_details WHERE ans_id='{$name['ans_id']}'");
    $stmt2->execute();

    // Start of printing column names as names of MySQL fields
    for($i=0; $i<$stmt2->columnCount(); $i++) {
        echo $stmt2->getColumnMeta($i)."\t";
    }

    print("\n");
    // End of printing column names

    // Start while loop to get data
    while($row = $stmt2->fetch(PDO::FETCH_ASSOC)) {
        $schema_insert = "";

        for($j=0; $j<$stmt2->columnCount(); $j++) {
            if(!isset($row[$j])) {
                $schema_insert .= "NULL".$sep;
            }
            elseif(isset($row[$j])) {
                $schema_insert .= "$row[$j]".$sep;
            }
            else {
                $schema_insert .= "".$sep;
            }
        }
        $schema_insert = str_replace($sep."$", "", $schema_insert);
        $schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert);
        $schema_insert .= "\t";
        print(trim($schema_insert));
        print "\n";
    }
}
?>

但问题是这段代码只是将数据导出到一个扩展,假设它几乎导出一个 8*20 的 excel 表并且不能导出超过该限制的数据。相反,它导出 Array、NULL 和页面代码。任何人都可以建议我应该怎么做才能解决这个问题?

最佳答案

$slct2 = $dbh->prepare("SELECT * FROM forms_answers WHERE ans_formid='{$identity}' LIMIT 1000");

$stmt2 = $dbh->prepare("SELECT * FROM forms_answers_details WHERE ans_id='{$name['ans_id']}' LIMIT 1000");

试试这个,可能是数据库服务器设置了限制。

根据数据更改限制

否则还有一种可能是它的进程由于内存和执行时间不足而中途中断。

也试试这两行

ini_set('max_execution_time',300);
ini_set('内存限制'​​,'512M')

将这两行放在获取数据之前;

它会帮助你。

关于php - excel导出无法从mysql获取太多数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41279144/

相关文章:

php - Laravel 从数据库中排序数据

excel - 获取 Excel 名称管理器定义的特定单元格的 'Name'

vba - Excel 宏修改(或者可能是 VBA)以更新最后包含的工作表

php - 提交按钮在 isset 中不起作用

mysql - 当字段输入以 # 开头时从 sql 中排除特定数据

mysql - 如果我只想使用 PHPMyAdmin 访问远程服务器,是否需要本地 MySQL 服务器?

c# - 如何使用 C# .net 创建只读 Excel 工作表

php - MYSQL - 具有多个 IN 子句的 PDO

php - 多文件上传 PHP

php - 我如何根据最早日期选择供应商?