提问人:S.Macualiff 提问时间:11/10/2023 更新时间:11/10/2023 访问量:25
将 sql 表数据导出到 Excel 工作表时出现内部服务器错误 (PHP)
Internal Server Error when export sql table data to Excel sheet (PHP)
问:
我需要将我的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\admin\PHP files\admin.php:114 中给出 堆栈跟踪:#0 C:\xampp\htdocs\mos\admin\PHP files\admin.php(114):implode('\t', 'Array\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";
}
答:
echo implode("\t" ,array_keys($value) . "\n" );
array_keys($value) . "\n"
创建一个字符串值(数组被替换为单词 ,因为当数组被强制到字符串上下文中时会发生这种情况),因此您将字符串作为第二个参数而不是数组提供给此处。Array
implode
这需要以相反的方式发生 - 首先内爆数组,在后面附加 \n:
echo implode("\t" ,array_keys($value)) . "\n";
else 分支中的另一行也是如此。
但是你真的应该首先使用 fputcsv
,而不是这个结构。如果任何数据字段包含分隔符 \t,则将创建一个错误的 CSV。 对于已经实现的,有必要的“逃逸”机制。fputcsv
评论