Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL导出到带有blob字段的CSV_Php_Mysql_Csv_Export_Blob - Fatal编程技术网

Php MySQL导出到带有blob字段的CSV

Php MySQL导出到带有blob字段的CSV,php,mysql,csv,export,blob,Php,Mysql,Csv,Export,Blob,我在使用php将BLOB导出到csv文件时遇到问题。显然,blob不是一个正常的字段,但它有时会被使用。但这里是我需要的,我需要这个脚本通过获取一个表数组并以csv格式导出每一行来工作。Blob把事情搞砸了。我尝试对blob进行base64_编码,但我相信这会错误地导出blob 以下是我到目前为止的情况: function exportcsv($tables) { foreach ($tables as $k => $v) { $fh = fopen('sql/'.

我在使用php将BLOB导出到csv文件时遇到问题。显然,blob不是一个正常的字段,但它有时会被使用。但这里是我需要的,我需要这个脚本通过获取一个表数组并以csv格式导出每一行来工作。Blob把事情搞砸了。我尝试对blob进行base64_编码,但我相信这会错误地导出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);
    }
}
任何帮助都将不胜感激

编辑:这是不带base64_encode()的blob导出的图像。


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

base64编码的目的是使二进制数据在不干净的8位传输层中传输,因此,是的,这是正确的

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

  • 制表符,因为这是您的分隔符
  • 新行字符,因为您似乎也在按行解析
  • 根据,Base64编码只跨越A-Z、A-Z、0-9、+和/,这意味着您是安全的,您发布的图像中的新行可能是您正在使用的IDE中的单词包装的产物。现在,您需要记住的是,当您想要将这些数据导入数据库时,不要期望只使用mysqldump或mysql<将其导入。您必须创建另一个php函数,该函数使用base64_decode将数据恢复到原始状态


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

    是否应该使用Base64\U解码?我不是BLOB方面的专家,但我相信如果你遵循我的意思,你肯定不想对它进行编码以查看真正的文本。你可以展示一下你的输出样本,这样我们就可以看到哪里出了问题吗?呵呵。抱歉,blob只是二进制的(好吧,是加密的密码)。所以无论如何,任何类型的导出都无法读取。但是base64_encode()的目标是使所有fputcsv()都能工作,因为blob具有所有类型的随机字符,blob字段会损坏导出,因为它将包含\r\t和\n。所以编码可以防止这些奇怪的问题,它确实可以防止它们。好吧,我明白了,但是当你说‘我相信这会错误地导出blob’时,你是什么意思?如果你能详细说明你期望从代码中得到什么以及它实际上给了你什么,也许我可以帮你:)谢谢Dany。添加一个图像来显示我在说什么。这是没有base64的。所以我最大的问题是,base64能正确地编码和解码任何字符吗?因为blob是所有东西的混合体。谢谢你提供的信息。经过各种测试,信息似乎是准确的。因此,使用base64对blob进行编码,然后对其进行解码,就可以正常工作了。此外,这有助于克服csv问题。谢谢