MySQL使用blob字段导出到CSV

时间:2011-11-22 02:01:21

标签: php mysql csv export blob

我有使用php将BLOB导出到csv文件的问题。显然斑点不是正常的场,但有时会使用它。但这就是我需要的东西,我需要这个脚本通过获取一个表数组并以csv格式导出每一行。 Blob搞砸了。我试图对blob进行base64_encode,但我认为这会错误地导出blob。

这是我到目前为止所做的:

function exportcsv($tables) {
    foreach ($tables as $k => $v) {
        $fh = fopen('sql/'.$v.'.csv', 'w');
        $sql = mysql_query("SELECT * FROM $v");
        while ($row = mysql_fetch_row($sql)) {
            $line = array();
            foreach ($row as $key => $v) {
                $line[] = base64_encode($v);
            }
            fputcsv($fh, $line, chr(9)); //tab delimiting
        }
        fclose($fh);
    }
}

任何帮助都将不胜感激。

编辑:这是blob导出的图像,没有base64_encode()。 https://www.strongspace.com/shared/crypok1lxb

那么,当需要重新导入时,base64会保护blob的格式吗?

1 个答案:

答案 0 :(得分:2)

Base64编码的目的是使二进制数据在通过非8位干净的传输层进行传输时仍然存在,所以是的,你正处于正确的轨道上。

你真正需要担心的是fputcsv()函数。您需要检查哪些危险物品?

  1. 标签,因为这是您的分隔符
  2. 新行字符,因为您似乎也在按行解析
  3. 根据this link,Base 64编码仅跨越AZ,az,0-9,+和/,这意味着您是安全的,并且您发布的图像中的新行可能是来自自动换行的工件您正在使用的IDE。现在你需要记住的是,当你想将这些数据导回到数据库时,不要只想使用mysqldump或mysql<管道输入。你将不得不创建另一个使用base64_decode的php函数将数据恢复到原始状态。

    您还应该知道,您当前正在编码所有字段,而不仅仅是blob数据。作为FYI,Base64编码占用了大约33%的空间,因此您可能需要使用一些位来定义表,指示该字段是否为blod,并且您希望在其上启用B64编码。