将sql表数据导出到Excel工作表时出现内部服务器错误(PHP)

问题描述 投票:0回答:1

我需要将我的sql数据表导出到Excel表。在这里我提到了所有的代码。当我触发名为 exportData() 的函数作为响应时,我遇到了内部服务器错误问题 (500)。我不知道我做错了什么。请帮我解决一下。

public function exportData(){
    $sql = "SELECT * FROM `issue recodes`";
    $exe = $GLOBALS['mydatabase']->query($sql);
    $rows = $exe->fetchAll(\PDO::FETCH_ASSOC);
    //print_r($rows);
    //define data file name
    $filename = "Backup_on_".date("Ymd")."xls";
    
    //download file
    header("Content-diposition : attachment; filename = '$filename'");
    header("Content-type : application/vnd.ms-excel");
    
    //render xls data
    $heading = false;
    if(!empty($rows)){
        // if the database has data then
        foreach($rows as $value){
            if(!$heading){
                //Already not heading written
                echo implode("\t" ,array_keys($value) . "\n" );
                $heading = true;
            }else{
                // If heading already wrote
                echo implode("\t" , array_values($value) . "\n");
            }
            
            
        }
        return true;
    }else{
        // if the database has not data
    }
}

等等,当我忽略 header() 行时,它会得到这样的错误

致命错误:未捕获的 TypeError:implode():参数 #2 ($array) 必须是 ?array 类型,在 C:\xampp\htdocs\mos dmin\PHP 文件 dmin.php:114 中给出的字符串 dmin.php:114 堆栈跟踪: #0 C:\xampp\htdocs\mos dmin\PHP 文件 dmin.php(114): implode(' ', 'Array ') #1 C:\xampp\htdocs\mos dmin\PHP 文件 xport.php(5): PHI dmin\Admin->exportData() #2 {main} 扔进 C:\xampp\htdocs\mos dmin\PHP 文件 dmin.php 第 114 行

以下是调用上述exportData()函数的export.php代码

//export issues as excel data sheet
require_once 'admin.php';
$admin = new PHI\admin\Admin();
if($admin->exportData()){
echo "downloaded";
}else{
echo "fail";
}
php pdo export-to-excel
1个回答
0
投票
echo implode("\t" ,array_keys($value) . "\n" );

array_keys($value) . "\n"
创建一个字符串值(数组被 word
Array
替换,因为这就是当数组被强制转换为字符串上下文时发生的情况),因此您在此处将字符串输入到
implode
,如下所示第二个参数,而不是数组。

这需要以相反的方式发生 - 首先内爆数组,追加 之后:

echo implode("\t" ,array_keys($value)) . "\n";

else 分支中的另一行也是如此。

但是你实际上应该使用

fputcsv
来开始,而不是这个结构。如果任何数据字段包含分隔符,您将创建一个错误的 CSV。
fputcsv
拥有已实施的必要“逃逸”机制。

© www.soinside.com 2019 - 2024. All rights reserved.