我们如何使用PHP将PDF文件存储在MySQL数据库中?
答案 0 :(得分:8)
使用BLOB(二进制大对象)(longblob
数据类型)
$fileHandle = fopen($fileUpload, "r");
$fileContent = fread($fileHandle, $fileUpload_size);
$fileContent = addslashes($fileContent);
$dbQuery = "INSERT INTO myBlobs VALUES ";
$dbQuery .= "('$fileContent')";
完整教程here
但强烈建议在文件系统上存储文件,只需在DB中添加引用(带有文件路径和名称的字段)。有几个原因:
答案 1 :(得分:5)
使用类型BLOB。
答案 2 :(得分:1)
正如其他人提到的,您可以使用BLOB类型。
或者,您还可以将PDF保存在文件系统中,并将相关链接保存到数据库中。这与用于保存缩略图和其他可能对用户无关的数据类型等内容的原理相同,并且在资源方面也很昂贵。
答案 3 :(得分:1)
如果您只是想在服务器上存储上传的PDF文件,则将文件复制到具有唯一文件名的给定目录更为常见,只需将该文件的完整路径存储在MySQL表中即可。
如果你肯定想要在MySQL数据库中存储文件的完整二进制数据,那么你将需要做更多的工作来将二进制数据放入MySQL中的BLOB字段然后将其转换回以后再次将其拉出时的文件。
您可能不仅要在MySQL表中存储文件的二进制数据,还要存储文件名,文件类型甚至文件大小(用于在您的网页上列出)。您可能需要一个表格,如;
CREATE TABLE files (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
filename VARCHAR(128) NOT NULL,
mimetype VARCHAR(64) NOT NULL,
data MEDIUMBLOB NOT NULL
);
在PHP中,您可以插入上传的文件,如下所示;
$filePointer = fopen($_FILES['fileUpload']['tmp_name'], 'r');
$fileData = fread($filePointer, filesize($_FILES['fileUpload']['tmp_name']));
$fileData = addslashes($fileData);
$sql = "INSERT INTO files (filename, mimetype, data) VALUES( $fileName, $fileType, $fileData )";
再次取出文件将需要一个专用脚本来选择适当的文件,然后使用一系列“标题”命令将该文件以浏览器知道如何处理它的形式推送回浏览器
您可以阅读有关此here的完整教程。