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

6vl6ewon  于 2023-11-16  发布在  PHP
关注(0)|答案(1)|浏览(148)

我需要将我的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()行时,它会得到这样的错误
致命错误:未捕获的类型错误:implode():参数#2($数组)必须是类型?数组,字符串给定在C:\xampp\htdocs\mos\admin\PHP files\admin.php:114堆栈跟踪:#0 C:\xampp\htdocs\mos\admin\PHP files\admin.php(114):implode('\t','数组\n')#1 C:\xampp\htdocs\mos\admin\PHP files\export.php(5):PHI\admin\Admin->exportData()#2 {main}抛出在C:\xampp\htdocs\mos\admin\PHP files\admin. 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";
}

d7v8vwbk

d7v8vwbk1#

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

字符串
array_keys($value) . "\n"创建一个字符串值(数组被 wordArray替换,因为这是当数组被强制转换为字符串上下文时发生的事情),所以这里您将字符串作为第二个参数提供给implode,而不是数组。
这需要以相反的方式发生-首先将数组内爆,然后追加\n:

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


else分支中的另一行也是如此。
但是你应该开始使用fputcsv,而不是这个结构。如果任何数据字段包含分隔符\t,你的结构将创建一个错误的CSV。fputcsv已经实现了必要的“转义”机制。

相关问题