我需要将我的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";
}
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
拥有已实施的必要“逃逸”机制。