如何使用PHP将.pdf文件以BLOB形式存储到MySQL中?

18
如何从PHP将.pdf文件以BLOB形式存储到MySQL中?
3个回答

14

编辑添加:以下代码已过时,在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_*函数在PHP 5.x中已经被弃用,在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准备语句。


mysqli_real_escape_string() 也需要数据库连接。Gordon,完成后可以通知我吗? - Funk Forty Niner
这个 mysqli_query 'INSERT 也应该有括号,就像这样 mysqli_query($con, 'INSERT... . '\');'); - Funk Forty Niner
@Fred-ii- 我正在仔细检查查询,但是mysqli_real_escape_string的文档说它不需要链接参数(尽管如果您提供一个,它必须是第一个参数)http://php.net/manual/en/mysqli.real-escape-string.php - GordonM
@GordonM "但是mysqli_real_escape_string的文档说它不需要链接参数" - 我想你可能在谈论mysql_real_escape_string()。相应的i版本确实需要传递连接,否则它将无法工作;至少我上次知道是这样的。 - Funk Forty Niner
1
@GordonM 哦,我明白了。我刚刚重新阅读了这个答案;不知道它为什么会被踩。我给你点个赞来补偿。 - Funk Forty Niner
显示剩余6条评论

1

-4
//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));

1
你能否请添加一些关于你的代码的解释?请访问帮助中心了解如何编写一个好的答案。 - Sourav Ghosh
1
投票删除。这段代码是一个典型的不应该做的例子。 - GordonM

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接