Insert/Save 将使用 FPDF 创建的 pdf 存入数据库
Insert/Save a pdf created using FPDF into the database
使用 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
的数据库中?
您可以使用 base64_encode()
而不是 addslashes()
这可以防止由于转换而导致二进制数据出现问题。从数据库读取时,您需要使用 base64_decode()
来扭转这一局面。
更好的选择是在数据库中使用 BLOB 列和 PHP 数据库驱动程序的 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();
此解决方案在数据库中存储未修改的二进制数据。
使用 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
的数据库中?
您可以使用 base64_encode()
而不是 addslashes()
这可以防止由于转换而导致二进制数据出现问题。从数据库读取时,您需要使用 base64_decode()
来扭转这一局面。
更好的选择是在数据库中使用 BLOB 列和 PHP 数据库驱动程序的 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();
此解决方案在数据库中存储未修改的二进制数据。