将使用 FPDF 创建的 pdf 插入/保存到数据库中
Posted
技术标签:
【中文标题】将使用 FPDF 创建的 pdf 插入/保存到数据库中【英文标题】:Insert/Save a pdf created using FPDF into the database 【发布时间】:2020-07-20 02:05:14 【问题描述】:使用fpdf库生成PDF文件并将文件插入数据库。
我正在使用以下代码:
$content = $pdf->Output($pname.'', 'S');
$sql = "INSERT into data(name) values('".addslashes($content)."')";
if ($conn->query($sql) === TRUE)
echo "success";
else
echo "Error: ";
$conn->close();
但是使用它,保存在数据库中的文件是二进制格式而不是 PDF 格式,下载时似乎不正确...
如何解决此问题并将我的文件以.pdf
扩展名保存到数据库中?
【问题讨论】:
问题解决了吗?下面给出的答案看起来很有希望。你试过了吗?它奏效了吗?不?你告诉他们了吗?你会得到什么,“错误:”或其他? “以二进制格式而不是 pdf 格式”没有意义。 PDF 是二进制格式。 你应该写$content = $pdf->Output( 'S');
。
只需从插入语句中删除 addslashes
。
【参考方案1】:
您可以使用base64_encode()
而不是addslashes()
这可以防止由于转换而导致二进制数据出现问题。从 DB 读取时,您需要使用 base64_decode()
来扭转这一点。
更好的选择是在您的数据库中使用 BLOB 列和 php DB 驱动程序的 LOB 功能。对于 PDO,这将是这样的:
$pdo = new \PDO(...);
$fp = fopen('data://' . $content, 'rb');
$stmt = $pdo->prepare("insert into data (name) values (?)");
$stmt->bindParam(1, $fp, PDO::PARAM_LOB);
$stmt->execute();
此解决方案将未修改的二进制数据存储在数据库中。
【讨论】:
Base64 无需浪费 33% 的存储空间(更不用说额外的 CPU)了。以上是关于将使用 FPDF 创建的 pdf 插入/保存到数据库中的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法让 FPDF/FPDI 或 Zend_Pdf 支持解析大于 1.4 的 PDF?