【问题标题】:PHP MYSQL BLOB export to csv formatPHP MYSQL BLOB 导出为 csv 格式
【发布时间】:2025-12-26 04:15:12
【问题描述】:

我正在尝试创建一个脚本,该脚本可以从包含文件(主要是 pdf)的 mysql 数据库中导出数据。然后将此数据导入系统的本地版本。

但是我的 BLOB 字段有问题,当我使用 PHPMYADMIN 导出和导入时,它工作正常,但是在使用我的脚本时,BLOB 字段的顶部添加了额外的代码。几乎就好像它是指示程序如何处理它的代码。当我尝试将此版本导入 PHPMYADMIN 时,它不起作用。

是格式错误,是否需要将其转换为类型。目前它只是简单地从数据库中拉取为 row['content'] 项,然后输出到 csv

任何帮助将不胜感激

问候

///////////////我的脚本源代码

$file = 'supportingFiles'; // csv name.
$result = mysql_query("SHOW COLUMNS FROM files");
$a = 0;

if (mysql_num_rows($result) > 0) {                                      //print column titles based on number of columns in the two files
while ($row = mysql_fetch_assoc($result)) {
$a++;
}
}

$values = mysql_query("SELECT * FROM files ");          //select client details wehere required

while ($rows = mysql_fetch_array($values)) {                                        //print client information
for ($k=0;$k<$a;$k++) {

$csv_output .= $rows[$k].",";
}
$csv_output .= "\n";            //end of line
}

$filename = $file."_".date("d-m-Y_H-i",time());

header("Content-type: application/csv");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header( "Content-disposition: filename=supportingFiles.csv");

echo $csv_output;           //output data file

当使用此脚本运行导出时,以下继续执行从 phpmyadmin 运行表的 csv 导出时输出的实际内容...

%âãÏÓ
%%ISIS AfpToPdf-V.6.2/h3 '2008-05-19 (build:6.20.0.08205)'
4 0 obj
[
/DeviceRGB
]
endobj
5 0 obj
[/Pattern 4 0 R] 
endobj
6 0 obj
[
/DeviceCMYK
]
endobj
7 0 obj
[/Pattern 6 0 R] 
endobj
14 0 obj
<</Length 1221/Filter/FlateDecode>>
stream
xÚ•WÛnã6ýÿümÌ%)’¢úo6Š6Û„ûTÈckW–RYÎ6ýüh‡CJ¶Ûi€\à™áp.gÇ‹|Æ!ÿ6{wÃA@~‚ãçgø3Í    %ph×3ü^ïÿæ[P2cB‚É4Käw?
R<¦èØo-\ïðs³_oüqŽ.yL11°Ø·uåžà}ÕìÜTûáÏüã-\-ó©.ÿ„ÅŸ^þ!Ÿý=óõ‘YÆRƒ=±ÌÀ¬Á$´îÊ”)•TÉ   ±6a¶×JŸúXËY¦ÇJµÖ²äìQ«/]k&ÍyÇœyV›¦gµši{^›0c†¨\c-jÏÆlì!ªÚQ!    Íä^#YrÁóQ™_juÊ5x¶“˜µaâÂYÉôùZ)ëQÛk³ÉY•2~>_¥Ž1×{þ4[ä’ŒÉÅv2<¾ÿâ{Œ_ïªr…ŒžÂð©©„9øú™FFÄZÄ«ª†1Ö        ŒÎ’58Tj˜â‡$áb¯D`²H‡¾
üí</m›ºÛ|¿ƒÕ¦h×n²ã¯—ˆøQc¿¼Ç‰ãvûå·ê k<ÙyJ+¦
"2¦75^‚Ó ãg&x M„ñ4–êØå  wȰ\äå%BÄËØŒ4쉷è÷çßASÃsb¢ñ(¾t_bO¼Gî…›7]Qõe„û¦=ªo:9ø|   Ö”3¾2õØéPü74–š 2qÔYle%Ûn‹ö š{xjö-«U³¯»·5Wáhz‹ª¨Wˆ¿¶ÙÂCëËf¿ƒeœ¥ Ÿ”Ã\{IÆðE   9i=î…    ð3ŠŠß‹§­«;DõÊ•îî¸  4ñþYöóÓÎ^¯<ÁeN$…ö±öG    ¥§÷kÔå”^]¥Xò2¼cˆ}\>¢LdQÅSA7=6RN¾‘¥B—    dXêjë[w{z¿Uâ‡WIÈxVÊK¥`ܬpЗֈx—þ! U¦¨¿ús    ½%ÁBŒœãÃ%؃ï¤ïž«p†ËzMÁaÞ6Ê»†"
iç\lMÏ>ÈL®v‘€šû8ê:Ú<kwh
‰h¶l#ì†ý"ô·+ÊjÇN½ü§7\2¥éû=0å‹¡¾ô½&±HW´ƒ„J^…–ǯ"?

【问题讨论】:

  • CSV 文件伴侣,它适用于 phpmyadmin 中的内置函数,但不适用于我的脚本,所以我猜 phpmyadmin 在以某种方式导出之前格式化数据?
  • 你的脚本代码是...? Blob 有哪些附加代码?
  • 当我运行我的代码时,我已经附加了我构建的脚本以及我的 csv 中的 addittioanl 输出,与 phpmyadmin 导出的结果相比
  • 这是一个猜测,但我建议 phpmyadmin 对你的 blob 字段进行 base64 编码......我还建议使用 PHP 的内置 fputcsv() 函数而不是尝试自己写,尤其是当你没有引用字符串等时。
  • “附加代码”是内部编写 PDF 时使用的原始 Postscript 代码。

标签: php mysql blob


【解决方案1】:

这是因为 CSV 没有很好地标准化为一种格式(甚至不是“逗号”中的“逗号”)并且这是因为 phpmyadmin 对值进行了一些编码/解码导出/导入。

您需要这个编码/解码部分,因为您的二进制文件 BLOB(如您所说,主要是 PDF)很容易包含逗号、换行符、引号和各种破坏 CSV 解析器的东西。

要使用 phpmyadmin 导入文件,您必须复制那里使用的编码机制 - 幸运的是它是开源的,您可以 have a look at the code

或者,如果您想要自己的导出/导入机制(比如说:您编写自己的与您的导出器匹配的导入器),那么您可以在此处充分利用 base64 编码来确保您的 CSV(它旨在作为一个普通的顺便说一下文本格式)正确存储二进制数据。

出口商:

// convert binary blob to text format
$plaintextdata_for_csv = base64_encode($binarydata_from_blob); 

进口商:

// decode text format to binary blob
$binarydata_for_blob = base64_decode($plaintextdata_from_csv); 

【讨论】:

  • 感谢您,现在开始缩小问题的范围。我现在发现,在 PHPMYADMIN 中,如果我选择视图作为纯文本选项,而不是将值实际导出到 csv 中,结果与我的代码生成的文件完全相同。有什么快速的想法可以节省我几个小时的狩猎时间吗?谢谢