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

如何使用PHP将.pdf文件作为blob存储到MySQL中?,php,mysql,pdf,Php,Mysql,Pdf,如何将.pdf文件作为PHP中的blob存储到MySQL中?编辑以添加::以下代码已过时,无法在PHP7中使用。有关更多详细信息,请参见答案底部的注释 假设表结构是一个整数ID和一个blob数据列,并且假设使用MySQL函数与数据库接口,您可能会执行以下操作: $result = mysql_query 'INSERT INTO table ( data ) VALUES ( \'' . mysql_real_escape_string (file_get_contents (

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

编辑以添加::以下代码已过时,无法在PHP7中使用。有关更多详细信息,请参见答案底部的注释


假设表结构是一个整数ID和一个blob数据列,并且假设使用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_*函数在PHP5.x中被弃用,在PHP7中被完全删除您现在别无选择,只能切换到更现代的数据库抽象(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的上述回答,
mysqli\u real\u escape\u string()
调用中的第一个和第二个参数应该替换为较新的php版本,
//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));

根据:

我的php代码如下:$fileSize=$\u FILES['userfile']['size']$fileType=$\u文件['userfile']['type']$fp=fopen($tmpName,'r')$content=fread($fp,filesize($tmpName))$content=addslashes($content)$esc=mysql\u real\u escape\u字符串(file\u get\u contents($fp))$query=“插入表(id、数据、Dealid)值(49,\”$esc.\”,0)”;它需要一个db连接,并作为第一个参数。我偶然发现有人用这个问答作为可能的复制品。为了提供正确的语法,应该对其进行更新;这是为那些不知道如何运作的未来访客/新手准备的。还需要一个数据库连接。一旦你完成了,你能打电话给我吗Gordon?这个
mysqli\u查询插入也应该有括号,就像
mysqli\u查询($con,'INSERT…\');)@GordonM我明白了。我刚才又重温了答案;我想知道为什么它被否决了。我给了你一个+来补偿。你能补充一下你的代码吗?请访问帮助中心了解如何写一个好答案。投票删除。这段代码是不应该做什么的一个主要例子