我有用于存储文件名的数据库表。它们存储在3列中,每列可以存储多个用逗号分隔的文件。就像这样:file_id
,file_1
,file_2
和file_3
是列名从mysql中的3列中选择文件并将它们压缩
file_id | file_1 | file_2 | file_3
1 file_1.txt, file_1.1.txt.. | file_2.txt,file_2.2.txt | file_3.txt,file_3.3.txt
我希望是明确什么是什么样子的。我希望选择所有文件名,然后查看文件夹并以zip格式下载。所以,我有什么直到现在
$filePath = 'uploads/';
$sql = "SELECT * FROM uploads WHERE file_id = 1"; // just for testing
$result = $pdo->prepare($sql);
//$result->bindParam(":id", $id);
$result->execute();
$resArray = $result->fetch();
foreach(['file_1', 'file_2', 'file_3'] as $col){
if (file_exists($filePath . $resArray[$col])){
$valid_files[] = $resArray[$col];
}
}
if(count($valid_files > 0)){
$zip = new ZipArchive();
$zip_name = "zipfile.zip";
if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE){
$error .= "* Sorry ZIP creation failed at this time";
}
foreach($valid_files as $res){
$zip->addFile($filePath.$res['file_1']);
$zip->addFile($filePath.$res['file_2']);
$zip->addFile($filePath.$res['file_3']);
}
//print_r($valid_files);
$zip->close();
// zip download
}
当我跑我有错误
代码Warning: Illegal string offset 'file_1' in ...
Warning: Illegal string offset 'file_2' in ...
Warning: Illegal string offset 'file_3' in ...
UPDATE:
print_r($res);
只包含1个文件从file_1
列
file_1.txt
print_r($resArray);
包含的所有文件从所有列..和奇怪的事情是,每个文件在阵列2倍
阵列([file_1] => file_1.txt [0] => file_1.txt [file_2] => file_2.txt,[1] => file_2.txt,[file_3] => file_3.txt,file_3.3.txt .jpg,file_3.3.txt,file_3.3.txt,file_3.3 .txt,[2] => file_3.3.txt,file_3.3.txt,file_3.3.txt,file_3.3.txt,file_3.3.txt,)
什么'$ res'包含在'的foreach($ valid_files)'和'$ resArray'在'的foreach([ 'file_1' ,...])? – Justinas
我已更新我的问题 –