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

2022-08-30 22:26:12

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


答案 1

编辑为添加:以下代码已过时,在 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。

更新: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预准备语句。


答案 2

关于上面Gordon M的答案,调用中的第1个和第2个参数应该换成较新的php版本,根据:http://php.net/manual/en/mysqli.real-escape-string.phpmysqli_real_escape_string ()


推荐