zoukankan      html  css  js  c++  java
  • 运用PDO存储将图片、音频文件存入数据库

    在数据库中创建表格的时候,有一个字段为image,用来保存图片,那么其类型就是blob,关于blob,百度百科是这样描述的

    BLOB (binary large object),二进制大对象,是一个可以存储二进制文件的容器。
    在计算机中,BLOB常常是数据库中用来存储二进制文件的字段类型。
    BLOB是一个大文件,典型的BLOB是一张图片或一个声音文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。
    根据Eric Raymond的说法,处理BLOB的主要思想就是让文件处理器(如数据库管理器)不去理会文件是什么,而是关心如何去处理它。
    但也有专家强调,这种处理大数据对象的方法是把双刃剑,它有可能引发一些问题,如存储的二进制文件过大,会使数据库的性能下降。在数据库中存放体积较大的多媒体对象就是应用程序处理BLOB的典型例子。
     
    将图片或者音频等文件存入数据库的原理,特别好理解,因为它们是文件,那么就可以用函数读,然后将读出的内容保存在字符串中,然后再讲该字符串存到数据库中。
    数据库如下:
    1 create table pic(
    2       id tinyint primary key auto_increment not null,
    3       image blob not null
    4 )engine=myisam charset=utf8;

    创建一个提交文件的表单,注意,提交文件的表单(form的属性method="post"  enctype="multipart/form-data")

     1 <form action="" method="post" enctype="multipart/form-data">
     2     <input type="file" name="pic" >
     3     <input type="submit" name="submit">
     4 </form>
     5 
     6 <?php 
     7     if(!empty($_POST)){
     8         try {
     9             $pdo=new PDO("mysql:host=localhost;dbname=test","root","root");
    10             $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
    11             
    12             $statement=$pdo->prepare("insert into pic values (:id,:image)");
    13 
    14             //开始读文件
    15             $fp=fopen($_FILES['pic']['tmp_name'],"rb");
    16             $content="";
    17             $content=fread($fp,filesize($_FILES['pic']['tmp_name']));
    18             fclose($fp);
    19 
    20             $statement->execute(["id"=>1,"image"=>$content]);
    21             echo "the picture has been saved
    ";
    22         } catch (PDOException $e) {
    23             echo "failed to save the picture";
    24             echo $e->getMessage();
    25         }
    26      }
    27 ?>

    可以中途输出content的内容,或者运行完成后从数据库中查看添加的内容,然而你却看不懂内容是什么,全是乱码,但是,你成功将图片保存到了数据库。

    接下来,你可以将数据库中的图片“数据”,读出来,然后再以图片的形式展示一下,看是不是已提交的那张图片,代码如下:

     1 <?php 
     2     try {
     3             $pdo=new PDO("mysql:host=localhost;dbname=test","root","root");
     4             $pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
     5             $statement=$pdo->prepare("select * from pic");
     6             $statement->execute();
     7             list($id,$image)=$statement->fetch(PDO::FETCH_NUM);
     8             header("Content-Type:image/png");
     9             echo $image;
    10         } catch (PDOException $e) {
    11             echo "failed to open the picture";
    12             echo $e->getMessage();
    13         }
    14 ?>
  • 相关阅读:
    Logistic回归
    朴素贝叶斯
    决策树
    K-邻近(KNN)算法
    快速排序
    归并排序
    希尔排序
    插入排序
    选择排序
    浅谈系统服务分发
  • 原文地址:https://www.cnblogs.com/-beyond/p/7560069.html
Copyright © 2011-2022 走看看