【问题标题】:How to store .pdf files into MySQL as BLOBs using PHP?如何使用 PHP 将 .pdf 文件作为 BLOB 存储到 MySQL 中?
【发布时间】:2011-06-16 09:09:24
【问题描述】:

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

【问题讨论】:

    标签: php mysql pdf


    【解决方案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 准备好的语句。

    【讨论】:

    • 我的 php 代码如下: $fileSize = $_FILES['userfile']['size']; $fileType = $_FILES['userfile']['type']; $fp = fopen($tmpName, 'r'); $content = fread($fp, 文件大小($tmpName)); $content = addlashes($content);$esc= mysql_real_escape_string(file_get_contents($fp));$query = "INSERT INTO table(id,data,Dealid) VALUES (49, \".$esc.\",0) ";
    • mysqli_query() 需要一个数据库连接并作为第一个参数。我从有人将其用作可能的副本的问答中掉了下来。应该更新它以提供正确的语法;这适用于不知道这一切如何运作的未来访客/新手。
    • mysqli_real_escape_string() 也需要一个数据库连接。一旦你完成了 Gordon,你能 ping 我吗?
    • 这个mysqli_query 'INSERT也应该有括号,就像mysqli_query($con, 'INSERT... . '\');');一样
    • @GordonM 啊,我明白了。我重新审视了刚才的答案;我想知道为什么它被否决了。我给了你一个 + 来补偿。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
      //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));
      

      【讨论】:

      • 你能添加一些关于你的代码的解释吗?请访问帮助中心了解如何写出好的答案。
      • 投票删除。这段代码是不应该做的一个典型例子
      猜你喜欢
      • 1970-01-01
      • 2015-09-05
      • 1970-01-01
      • 2012-03-17
      • 2011-11-07
      • 2014-10-28
      • 2020-01-03
      • 1970-01-01
      • 2013-07-30
      相关资源
      最近更新 更多