如何使用PHP将.pdf文件作为BLOB存储在MySQL中?
如何将.pdf文件作为PHP的BLOB存储到MySQL中?
编辑为添加:以下代码已过时,在 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预准备语句。
关于上面Gordon M的答案,调用中的第1个和第2个参数应该换成较新的php版本,根据:http://php.net/manual/en/mysqli.real-escape-string.phpmysqli_real_escape_string ()