我利用幻像捕获图像,然后将它们上传到集中式MySQL数据库。
我遇到的问题是,它一直在削减我尝试推送的每个文件的结尾。如果它的.pdf,.png,.docx,.xlsx ......它切断了文件的一部分,从而破坏了它,这并不重要。奇怪的是它总是削减每个文件的相同数量。
我的SQL插入代码是:
$put_linkdata = $DBW->prepare('INSERT `'.$tableD.'` SET
captured = :capture_time,
error = :eYN,
link = :link,
image = :image,
html = :html,
`text` = :plaintext,
file = :file,
mimetype = :mimetype');
$put_linkdata->bindValue(':capture_time', date('Y-m-d H:i:s',$record['timestamp']));
$put_linkdata->bindValue(':link', $item['url']);
$put_linkdata->bindValue(':mimetype', $record['mimetype']);
$put_linkdata->bindParam(':eYN', $record['error'], PDO::PARAM_STR);
$put_linkdata->bindParam(':image', $record_child['image'], PDO::PARAM_LOB);
$put_linkdata->bindParam(':plaintext', $record_child['text'], PDO::PARAM_LOB);
$put_linkdata->bindParam(':html', $record_child['html'], PDO::PARAM_LOB);
$put_linkdata->bindParam(':file', $record_child['file'], PDO::PARAM_LOB);
if($put_linkdata->execute()){
$linkData_record['id'] = $DBW->lastInsertId();
print PHP_EOL.mb_strlen($record_child['image'], '8bit');
print PHP_EOL.PHP_EOL.'~~~~~~~~~~~~~~~~~~~~~~~~~~~'.PHP_EOL.PHP_EOL;
die();
}
else{
throw New Exception('Error inserting linkdata record into archive - SQL error "'.$put_linkdata->queryString.'"'.PHP_EOL.PHP_EOL.$put_linkdata->errorInfo());
}
我已经运行了大量的测试,在此之前的所有数据仍然保持完整性,如果我file_put_contents()它与捕获的图像或文件相同。
图片示例,拉google.com给我一张25K的图像,但上传的是17.2K。一个pdf,55K的上传速度为40.7K。另一个pdf是1.5 MB,但上传量为1.1 MB。当我针对db blob区分文件时,DB中的blob缺少文件底部的内容。
文件的大小和内容不一致,但对于相同的捕获,IS是一致的。
有人有什么想法吗?
更新 我已将其缩小到准备好的声明和上传之间发生的事情。
此外,当使用预准备语句时,在PDO和MySQLI中都会发生这种情况。第一个假设是某处的字符集编码是不正确的,但是所有内容都定义为UTF8(db,table,PDO connection,config files)。
答案 0 :(得分:0)
发现问题,这篇文章现在看起来相当愚蠢,但未来任何人都会遇到这个问题......
旧版本的PHPMyAdmin出现错误,因为它没有正确显示或下载blob列中的数据。