Php MySQL导出到带有blob字段的CSV
我在使用php将BLOB导出到csv文件时遇到问题。显然,blob不是一个正常的字段,但它有时会被使用。但这里是我需要的,我需要这个脚本通过获取一个表数组并以csv格式导出每一行来工作。Blob把事情搞砸了。我尝试对blob进行base64_编码,但我相信这会错误地导出blob 以下是我到目前为止的情况: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/'.
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()函数。你需要检查哪些危险物品
您还应该知道,您当前正在编码所有字段,而不仅仅是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问题。谢谢