如何将.pdf文件作为BLOB从PHP存储到MySQL中?
答案 0 :(得分:11)
已编辑添加:以下代码已过时,无法在PHP 7中运行。有关详细信息,请参阅答案底部的注释。
假设一个整数ID和一个blob DATA列的表结构,并假设MySQL函数用于与数据库接口,你可能会这样做:
$result = mysql_query 'INSERT INTO table (
data
) VALUES (
\'' . mysql_real_escape_string (file_get_contents ('/path/to/the/file/to/store.pdf')) . '\'
);';
尽管如此,在数据库中存储blob通常不被认为是最好的主意,因为它可能导致表膨胀,并且还存在许多与之相关的其他问题。更好的方法是将文件移动到可以检索它的文件系统中的某个位置,并将文件的路径存储在数据库中而不是文件本身。
此外,不鼓励使用mysql_ *函数调用,因为这些方法实际上已被弃用,并且实际上并未构建为比4.x更新的MySQL版本。你应该切换到mysqli或PDO。
UPDATE :PHP 5.x中的mysql_ *函数已弃用,并且在PHP 7中完全删除了!你现在别无选择,只能切换到更现代的数据库抽象(MySQLI,PDO)。由于历史原因,我决定将上面的原始答案完整保留,但实际上并没有使用它
以下是如何在程序模式下使用mysqli执行此操作:
$result = mysqli_query ($db, 'INSERT INTO table (
data
) VALUES (
\'' . mysqli_real_escape_string (file_get_contents ('/path/to/the/file/to/store.pdf'), $db) . '\'
);');
理想的做法是使用MySQLI / PDO编写的语句。
答案 1 :(得分:1)
关于Gordon M的上述答案,mysqli_real_escape_string ()
调用中的第一个和第二个参数应该换成较新的php版本,
根据:http://php.net/manual/en/mysqli.real-escape-string.php
答案 2 :(得分:-2)
//Pour inserer :
$pdf = addslashes(file_get_contents($_FILES['inputname']['tmp_name']));
$filetype = addslashes($_FILES['inputname']['type']);//pour le test
$namepdf = addslashes($_FILES['inputname']['name']);
if (substr($filetype, 0, 11) == 'application'){
$mysqli->query("insert into tablepdf(pdf_nom,pdf)value('$namepdf','$pdf')");
}
//Pour afficher :
$row = $mysqli->query("SELECT * FROM tablepdf where id=(select max(id) from tablepdf)");
foreach($row as $result){
$file=$result['pdf'];
}
header('Content-type: application/pdf');
echo file_get_contents('data:application/pdf;base64,'.base64_encode($file));