您的位置:首页 > 数据库

运用PDO存储将图片、音频文件存入数据库

2017-09-20 10:48 281 查看
在数据库中创建表格的时候,有一个字段为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\n";
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 ?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐