如何使用PHP将.pdf文件作为BLOB存储到MySQL中?

时间:2011-01-27 07:54:27

标签: php mysql pdf

如何将.pdf文件作为BLOB从PHP存储到MySQL中?

3 个答案:

答案 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));